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:取消已选中的文本值。

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

相关推荐
JTaoX1 分钟前
PyCharm 连接本地虚拟机完整指南
ide·python·pycharm
Hi_Amos10 分钟前
记一次 yfinance 源码调试:SOCKS5 代理下 Chart API 正常,历史数据却一直超时
python·k线·yfinance
青少儿编程课堂28 分钟前
用图形化编程做一个“少年探险闯关”小游戏:方向键控制、碰撞检测与多关卡串起完整项目
c++·python·算法·bfs·信息学竞赛
雨田言炎34 分钟前
STM32专题之内部FLASH详解
笔记·stm32·单片机
evans在进步1 小时前
Spring Boot 工程化核心详解:Parent、Starter、热部署、事务与多数据源
spring boot·后端·python
xiaoxiangsiyan1 小时前
全网IPv6规模化改造实战指南
运维·网络·笔记·云原生·自动化
战略性的菠萝1 小时前
学习笔记-Numpy知识
python·numpy
总有刁民想爱朕ha1 小时前
零基础Python开发「图片批量转MP4视频」工具,本地离线、免费无水印
开发语言·python·音视频
捧 花2 小时前
FastAPI 基础语法:从一个完整接口理解 Web API 的设计
前端·python·fastapi·middleware
Ming_studying2 小时前
Python批量压缩图片:支持JPG_PNG_WebP、尺寸限制与CSV报告
开发语言·图像处理·python·pillow·图片压缩