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():右击
pythonfrom 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(源位置,目标位置):拖动
- 定位元素的源位置
- 定位元素要移动的目标位置
- 执行元素的移动操作
-
move_to_element(源位置,目标位置):鼠标悬停在一个元素上
- 定位元素的源位置
- 定位元素要移动的目标位置
- 执行元素的移动操作
-
click_and_hold():按下鼠标左键在一个元素上
2.键盘事件
设置键盘事件,其中键盘事件相关的API方法都封装在Keys类中。
python
from selenium.webdriver.common.keys import Keys #设置键盘事件
-
键盘删除时间
send_keys(Keys.BACKSPACE) -
空格事件
send_keys(Keys.SPACE) -
全选事件
send_keys(Keys.CONTROL,'a') -
复制事件
send_keys(Keys.CONTROL,'c') -
粘贴事件
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来完成定位操作。
- index的值是从0开始的,传入整型参数即表示使用index来进行定位,但是如果传入的是String类型,则表示使用id,name来进行定位。
- WebElement对象,即用find_element系列方法所取得的对象,可以用tag_name,Xpath父子定位等方式来定位frame对象。
2.从frame中切回主文档
如果切换至frame,则不能继续操作主文档的元素。如果需要操作主文档元素,则必须完成文档与frame的切换操作。
python
self.get_driver.switch_to.default_content()
3.嵌套frame的操作
遇到多层frame嵌套的情况:
-
先从主文档切换到iframe1,然后从iframe1切换到iframe2,一层层切换进去。
pythonself.get_driver.switch_to.frame("iframe1") self.get_driver.switch_to.frame("iframe2") -
从iframe再切换回iframe1,这里Selenium提供了一个方法能够从子iframe切回到父iframe,而不用先切回主文档再切换进来。
pythonself.get_driver.switch_to.parent_frame()
4.下拉列表框的多种实现方式
-
间接选择
先定位到下拉列表框,再定位其中的选项。
-
直接选择
直接定位到下拉列表框中的选项。
-
Select模块
WebDriver API 中内置了一个Select模块,该模块专门用于实现下拉列表框的处理操作。
pythonfrome selenium.webdriver.support.select import Select其中有三种定位选项的方法。
- select_by_index():通过索引定位(从0开始)
- select_by_value():通过value值定位
- select_by_visible_text():通过选项的文本值定位
基本思路:
python1.获取Select对象 select_object=Select() 2.通过索引获取 3.通过value值获取 3.通过文本值获取Select模块提供了四种取消选中项的方法
- deselect_all:取消全部的已选择项
- deselect_by_index:取消已选中的索引项
- deselect_by_value:取消已选中的value值。
- deselect_by_visible_text:取消已选中的文本值。
**注意:**遇到下拉列表框选项已经默认选中的情况,这时可以用到这四种取消选中项的方法。