WebDriver API及对象识别技术

​ WebDriver API相比之前的Selenium-RC API而言,不仅解决了一些相关的限制,还使得接口更简洁,同时更好地支持了页面本身不重新加载而页面元素发生改变的动态网页。所以WebDriver API的实现目的不仅是提供一个良好的面向对象API,而且对Web应用程序测试过程中所产生的问题也提供了很大的支持。

​ Web应用程序的测试主要是基于调用WebDriver API来模拟用户的操作,然后判断操作结果是否与预期结果一致,从而达到自动化测试的目的。所以熟悉WebDriver的API使用显得至关重要,这也是完成自动化测试的先决条件。

1.鼠标键盘模块

API 方法都封装在ActionChains类中。

python 复制代码
from selenium.webdriver.common.action_chains import ActionsChains

常用的鼠标事件对应的API方法:

  • context_click():右击

    python 复制代码
    from selenium import webdriver
    from selenium.webdriver.common.action_chains import ActionChains
    from time import sleep
    from selenium.webdriver.common.by import By
    
    driver = webdriver.Chrome()
    driver.get("http://www.baidu.com")
    sleep(2)
    elem = driver.find_element(By.XPATH,"//ul[@class='s-hotsearch-content']/li[1]/a")
    sleep(2)
    ActionChains(driver).context_click(elem).perform()
    sleep(2)
    driver.close()
  • double_click():双击

  • drag_and_drop(源位置,目标位置):拖动

    1. 定位元素的源位置
    2. 定位元素要移动的目标位置
    3. 执行元素的移动操作
  • move_to_element(源位置,目标位置):鼠标悬停在一个元素上

    1. 定位元素的源位置
    2. 定位元素要移动的目标位置
    3. 执行元素的移动操作
  • click_and_hold():按下鼠标左键在一个元素上

2.键盘事件

设置键盘事件,其中键盘事件相关的API方法都封装在Keys类中。

python 复制代码
from selenium.webdriver.common.keys import Keys #设置键盘事件
  1. 键盘删除时间

    复制代码
    send_keys(Keys.BACKSPACE)
  2. 空格事件

    复制代码
    send_keys(Keys.SPACE)
  3. 全选事件

    复制代码
    send_keys(Keys.CONTROL,'a')
  4. 复制事件

    复制代码
    send_keys(Keys.CONTROL,'c')
  5. 粘贴事件

    复制代码
    send_keys(Keys.CONTROL,'v')
3.多个iframe处理

在Selenium中iframe同样如此,如果驱动器对象处于当前iframe框架中,此时驱动器对象是无法操作其他的iframe的。如果需要操作,则需要调用对应的API方法完成iframe的切换操作。

​ frame标签有frameset,frame,iframe三种类型,其中frameset跟其他普通标签没有区别,不会影响到正常的定位,frame与iframe对Selenium定位而言是一样的。Selenium有一组方法对frame进行操作。

1.如何切换frame

Selenium提供了switch_to.frame()方法来切换frame。

python 复制代码
switch_to.frame(param)
#param 表示传入的参数,该参数可以是iframe元素的id,name,index等属性,还可以是定位该iframe所返回的Selenium的WebElement对象。

​ 一般情况下,如果iframe存在id和name属性,则使用这两个属性可以直接定位。但有些场景中前端frame框架中不一定设置这两个属性,那么就需要使用index,WebElement来完成定位操作。

  1. index的值是从0开始的,传入整型参数即表示使用index来进行定位,但是如果传入的是String类型,则表示使用id,name来进行定位。
  2. WebElement对象,即用find_element系列方法所取得的对象,可以用tag_name,Xpath父子定位等方式来定位frame对象。
2.从frame中切回主文档

​ 如果切换至frame,则不能继续操作主文档的元素。如果需要操作主文档元素,则必须完成文档与frame的切换操作。

python 复制代码
self.get_driver.switch_to.default_content()
3.嵌套frame的操作

遇到多层frame嵌套的情况:

  1. 先从主文档切换到iframe1,然后从iframe1切换到iframe2,一层层切换进去。

    python 复制代码
    self.get_driver.switch_to.frame("iframe1")
    self.get_driver.switch_to.frame("iframe2")
  2. 从iframe再切换回iframe1,这里Selenium提供了一个方法能够从子iframe切回到父iframe,而不用先切回主文档再切换进来。

    python 复制代码
    self.get_driver.switch_to.parent_frame()
4.下拉列表框的多种实现方式
  • 间接选择

    先定位到下拉列表框,再定位其中的选项。

  • 直接选择

    直接定位到下拉列表框中的选项。

  • Select模块

    WebDriver API 中内置了一个Select模块,该模块专门用于实现下拉列表框的处理操作。

    python 复制代码
    frome selenium.webdriver.support.select import Select

    其中有三种定位选项的方法。

    • select_by_index():通过索引定位(从0开始)
    • select_by_value():通过value值定位
    • select_by_visible_text():通过选项的文本值定位

    基本思路:

    python 复制代码
    1.获取Select对象
    select_object=Select()
    2.通过索引获取
    3.通过value值获取
    3.通过文本值获取

    Select模块提供了四种取消选中项的方法

    • deselect_all:取消全部的已选择项
    • deselect_by_index:取消已选中的索引项
    • deselect_by_value:取消已选中的value值。
    • deselect_by_visible_text:取消已选中的文本值。

    **注意:**遇到下拉列表框选项已经默认选中的情况,这时可以用到这四种取消选中项的方法。

相关推荐
番茄育学园12 分钟前
我的三款主流云存储音乐库实测笔记
笔记·分类·媒体
北极星日淘2 小时前
中古货品品相评级算法实战|Java权重计分实现标准化五级品相体系
开发语言·python
hangyuekejiGEO2 小时前
临沂GEO服务企业技术选型分析
人工智能·python
十月的皮皮3 小时前
C语言学习笔记20260706-栈的压入、弹出序列验证
c语言·笔记·学习
闲猫3 小时前
Python 虚拟环境 virtualenv & uvicorn 服务搭建 & FAstAPI 使用
开发语言·python
AI视觉网奇3 小时前
vllm 多卡部署
python
精明的身影3 小时前
网络计划WebApp求解:融合Python与AI决策的项目管理系统
网络·python·web app
AI科技星4 小时前
全域谱分析:无穷维超复数信息场分形统一场论——自然、量子、金融多重分形第一性原理完整体系(中英双语终稿)
人工智能·python·算法·金融·乖乖数学·全域数学
用户0332126663674 小时前
使用 Python 在 Word 文档中添加批注
python
蜡笔削薪4 小时前
财联万业(杭州)数字科技有限公司能否给代理划定独家经营区域?
大数据·人工智能·python·科技