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

本文围绕Selenium展开,介绍其在Web自动化中的应用。涵盖了Selenium提供的操作接口,如ActionChains用于PC端鼠标操作、TouchActions模拟多种手势操作,还阐述了表单操作、多窗口处理及网页frame处理的方法和步骤,为Web自动化测试提供了详细指导。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

序: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.方法1
3、添加动作方法2  action.方法2
4、调用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("https://www.baidu.com/")
        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/selenium.webdriver.common.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("https://www.baidu.com")
        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("https://www.baidu.com/")
        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_handles
        self.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("子节点")

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值