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

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

相关推荐
茉莉玫瑰花茶19 分钟前
综合案例 - AI 智能租房助手 [ 5 ]
服务器·数据库·人工智能·python·ai
三品吉他手会点灯23 分钟前
STM32F103 学习笔记-24-I2C-读写EEPROM(第1节)-I2C物理层介绍
笔记·stm32·学习
文艺倾年25 分钟前
【强化学习】强化学习基本概念,20W字总结(一)
人工智能·python·语言模型·自然语言处理·面试·职场和发展·大模型
宸丶一29 分钟前
Day 13:持久化记忆 - 让 Agent 拥有长期记忆
jvm·python·ai
码云骑士1 小时前
13-列表append的底层真相(上)-listobject源码中的预分配策略
开发语言·python
浦信仿真大讲堂1 小时前
达索系统SIMULIA Abaqus 2026接触和约束的增强新功能介绍
人工智能·python·算法·仿真软件·达索软件
万物更新_1 小时前
vue框架
前端·javascript·vue.js·笔记
xufengzhu1 小时前
第三方 Python 库 Loguru 的进阶实战
python·loguru
上海观智网络2 小时前
上海小程序定制开发合同怎么签?需要注意什么?
经验分享·笔记·小程序
极光代码工作室2 小时前
基于深度学习的手写数字识别系统
人工智能·python·深度学习·神经网络·机器学习