失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > web自动化:web控件交互操作/多窗口处理/网页frame

web自动化:web控件交互操作/多窗口处理/网页frame

时间:2019-12-19 14:30:29

相关推荐

web自动化:web控件交互操作/多窗口处理/网页frame

序:web自动化,除了需要定位网页元素外,在定位到元素后,一般都需要执行一系列操作,最常用的就是单击click,另外还包括输入文件、右键点击,页面滑动,表单操作等

selenium webdriver api指导文档:

https://selenium-python.readthedocs.io/api.html

selenium提供的操作接口:

ActionChains:执行PC端的鼠标点击,双击,右键,拖拽等操作

TouchActions:模拟PC和移动端的点击,滑动,拖拽,多点触控等多种手势操作

ActionChains用法:

包含的一些基本操作:

click(on_element=None):模拟左键点击,如果不传入element,那么点击鼠标当前位置

click_and_hold(on_element=None):点击并不释放

context_click(on_element=None):模拟右键点击

double_click(on_element=None):模拟双击

drag_and_drop(source, target):拖动然后移动到另外一个位置放下,传入两个元素,第一个元素位置和第二个元素位置

key_down(value,element=None)

key_up(value,element=None)

ActionChains执行原理

调用ActionChains的方法时,不会立即执行,而是将所有的操作,按顺序存放在一个队列里,当调用perform()方法时,才会以此执行基本用法:1、生成一个动作action = ActionChains(driver)2、添加动作方法1 action.方法13、添加动作方法2 action.方法24、调用action.perform()方法执行具体写法:1、链式写法ActionChains(driver).move_to_element(element).click(element).perform()2、分布写法action = ActionChains(driver)action.move_to_element(element)action.click(element)action.perform()

1、模拟点击、右键、双击等操作

element_click = self.driver.find_element_by_xpath('xpath')element_doubleclick = self.driver.find_element_by_xpath('xpath')element_rightclick = self.driver.find_element_by_xpath('xpath')action = ActionChains(self.driver)action.click(element_click)action.double_click(element_doubleclick)action.context_click(element_rightclick)sleep(3)action.perform()

2、模拟鼠标移动到某个元素上

def test_movetoelement(self):self.driver.get("/")self.driver.maximize_window()element = self.driver.find_element_by_xpath('//*[@id="u1"]/span')action = ActionChains(self.driver)action.move_to_element(element)action.perform()sleep(5)

3、模拟按键

模拟按键方法有多种:1、用win32api来实现 2、能用SendKeys来实现 3、能用selenium的webelement对象的send_keys()方法实现4、ActionChains类也提供了几个模拟按键的方法ActionChains用法介绍1、action = ActionChains(self.driver)2、action.send_keys(Keys.BACK_SPACE)3、或者action.key_down(Keys.CONTROL).send_keys("a").key_up(Keys.CONTROL)4、action.perform()

self.driver.get()element = self.driver.find_element_by_xpath("")element.click()action = ActionChains(self.driver)action.send_keys("username").pause(1)action.send_keys(Keys.SPACE).pause(1)action.send_keys("tom").pause(1)action.send_keys(Keys.BACK_SPACE).perform()

TouchActions用法:

官网文档:

https://www.selenium.dev/selenium/docs/api/py/webdriver/mon.touch_actions.html?highlight=touchactions

TouchAction类似与ActionChains,ActionChains只是针对PC端程序鼠标模拟的一系列操作,对h5页面操作是无效的TouchAction可以对h5页面操作,可以实现点击、滑动、多点触控、以及模拟手势的各种操作手势控制:tap---在指定元素上单击double_tap---在指定元素上双击tap_and_hold---在指定元素上点击但不释放move---手势移动指定偏移(不释放)release---释放手势scroll---手势点击并滚动scroll_form_element---从某个元素位置开始手势点击并滚动(向下滑动为负数,向上滑动为正数)long_press---长按元素flick---手势滑动flick_element---从某个元素位置开始手势滑动(向上滑动为负数,向下滑动为正数)perform---执行

class TestTouchActions:def setup(self):option = webdriver.ChromeOptions()option.add_experimental_option('w3c', False)self.driver = webdriver.Chrome(options=option)self.driver.implicitly_wait(5)self.driver.maximize_window()def teardown(self):self.driver.quit()def test_touchactions_scrollbutton(self):'''打开百度网页在搜索框中输入‘selenium’滑动到底部,点击下一页按钮关闭chorme浏览器'''self.driver.get("")ele = self.driver.find_element_by_id('kw').send_keys('selenium')ele_su = self.driver.find_element_by_id('su')action = TouchActions(self.driver)action.tap(ele_su)action.perform()# 滑动到底部action.scroll_from_element(ele_su, 0, 10000).perform()sleep(2)

表单操作

表单时一个包含表单元素的区域,是允许用户在表单中(如文本域、下拉列表、单选框、复选框等)输入信息的元素

表单使用表单标签(<form>)定义,例如 :<form><input/></form>

操作表单元素的步骤:

1、定位到表单元素

2、操作元素:清空,输入或者点击等

多窗口处理

当我们在网页上点击一个按钮,如果新开一个网页窗口去实现页面跳转,然后需要在新页面上操作,这种情况该如何处理

想在新页面上操作,就得先切换窗口,获取窗口的唯一标识用句柄表示,所以只需要切换句柄,就可以在多个页面灵活操作

多窗口处理方法:

1、先获取到当前的窗口句柄:driver.current_window_handle

2、再获取到所有窗口的句柄:driver.window_handles

3、判断是否是想要操作的窗口,如果是,就可以对窗口进行操作,如果不是,跳转到另外一个窗口:driver.switch_to.window,对另一个窗口进行操作

多窗口切换案例:打开百度页面,点击登录,在弹框中点击立即注册(打开一个新页面,在用户名处输入username),返回刚才的登录页面,点击用户名登录

def test_windows(self):self.driver.get("/")self.driver.find_element_by_xpath('//*[@id="u1"]/a').click()print(self.driver.current_window_handle)self.driver.find_element_by_link_text('立即注册').click()print(self.driver.window_handles)print(self.driver.current_window_handle)windows = self.driver.window_handlesself.driver.switch_to.window(windows[1])self.driver.find_element_by_id("TANGRAM__PSP_4__userName").send_keys("username")sleep(3)self.driver.switch_to.window(windows[0])self.driver.find_element_by_id('TANGRAM__PSP_11__footerULoginBtn').click()sleep(3)

网页frame处理

当一个网页里面有多个html页面组成时,比如网页内嵌,这时就会有多个frame,这种场景又该如何处理

在web自动化中,如果一个元素定位不到,那么很大可能是在iframe中

什么是frame:frame是html中的框架,在html中,所谓的框架就是可以在同一个浏览器中显示不止一个页面,基于html的框架,又分为垂直框架和水平框架(cols,rows)

frame分类:

frame标签包含frameset、frame、iframe三种,frameset和普通的标签一样,不会影响元素定位

而frame与iframe对selenium定位而言是一样的,selenium有一组方法可以对frame进行操作

frame的存在方式有两种:一种是嵌套的,一种是不嵌套的

切换frame:

driver.switch_to.frame() 根据元素id或者index切换frame

driver.switch_to.default_content() 切换到默认frame

driver.switch_to.parent_frame() 切换到父级frame

处理未嵌套的iframe:

driver.switch_to.frame(frame_id)

driver.switch_to.frame(frame_index) frame无id的时候根据索引来处理,索引从0开始,driver.switch_to_frame(0)

处理嵌套的iframe:

对于嵌套的先进入iframe的父节点,再进到子节点,然后可以对子节点里面的对象进行处理和操作

driver.switch_to.frame("父节点")

driver.switch_to.frame("子节点")

如果觉得《web自动化:web控件交互操作/多窗口处理/网页frame》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。