Selenium自动化测试
2020-01-16 11:12:31 52 举报
AI智能生成
Selenium自动化测试框架
作者其他创作
大纲/内容
原理安装
Selenium 是一个 Web 应用的自动化框架。
通过它,我们可以写出自动化程序,像人一样在浏览器里操作web界面。 比如点击界面按钮,在文本框中输入文字 等操作。
而且还能从web界面获取信息。 比如获取12306票务信息,招聘网站职位信息,财经网站股票价格信息 等等,然后用程序进行分析处理。
通过它,我们可以写出自动化程序,像人一样在浏览器里操作web界面。 比如点击界面按钮,在文本框中输入文字 等操作。
而且还能从web界面获取信息。 比如获取12306票务信息,招聘网站职位信息,财经网站股票价格信息 等等,然后用程序进行分析处理。
Selenium<-->浏览器驱动<-->浏览器
- 自动化程序调用Selenium 客户端库函数(比如点击按钮元素)
- 客户端库会发送Selenium 命令 给浏览器的驱动程序
- 浏览器驱动程序接收到命令后 ,驱动浏览器去执行命令
- 浏览器执行命令
- 浏览器驱动程序获取命令执行的结果,返回给我们自动化程序
from selenium import webdriver
# 创建 WebDriver 对象,指明使用chrome浏览器驱动
wd = webdriver.Chrome(r'd:\webdrivers\chromedriver.exe')
# 调用WebDriver 对象的get方法 可以让浏览器打开指定网址
wd.get('https://www.baidu.com')
# 创建 WebDriver 对象,指明使用chrome浏览器驱动
wd = webdriver.Chrome(r'd:\webdrivers\chromedriver.exe')
# 调用WebDriver 对象的get方法 可以让浏览器打开指定网址
wd.get('https://www.baidu.com')
操作元素
选择元素的方法
根据id
根据 tag 名
find_element 和 find_elements 的区别
使用 find_elements 选择的是符合条件的 所有 元素, 如果没有符合条件的元素, 返回空列表
使用 find_element 选择的是符合条件的 第一个 元素, 如果没有符合条件的元素, 抛出 NoSuchElementException 异常
使用 find_element 选择的是符合条件的 第一个 元素, 如果没有符合条件的元素, 抛出 NoSuchElementException 异常
通过WebElement对象选择元素
不仅 WebDriver对象有 选择元素 的方法, WebElement对象 也有选择元素的方法。
element对象仍然可以再次被调用,是指在这个对象内查找而不是全局查找
element对象仍然可以再次被调用,是指在这个对象内查找而不是全局查找
等待界面元素出现
如果找不到元素, 每隔 半秒钟 再去界面上查看一次, 直到找到该元素, 或者 过了10秒 最大时长。
基本操作
点击
WebElement 对象的 click 方法去点击 元素的时候, 浏览器接收到自动化命令,点击的是该元素的 中心点 位置 。
输出框
element = wd.find_element_by_id("input1")
element.clear() # 清除输入框已有的字符串
element.send_keys('白月黑羽') # 输入新字符串
element.clear() # 清除输入框已有的字符串
element.send_keys('白月黑羽') # 输入新字符串
获取元素信息
element = wd.find_element_by_id('animal')
print(element.text)
print(element.text)
获取元素属性值
element = wd.find_element_by_id('input_name')
print(element.get_attribute('class'))
print(element.get_attribute('class'))
获取HTML
element.get_attribute('outerHTML')
element.get_attribute('innerHTML')
获取输入框文字
element = wd.find_element_by_id("input1")
print(element.get_attribute('value')) # 获取输入框中的文本
print(element.get_attribute('value')) # 获取输入框中的文本
也可使用text,或者html来避免错误
【重要】CSS选择器
根据 tag名、id、class 选择元素
基本语法
选择 子元素 和 后代元素
如果 元素2 是 元素1 的 后代元素, CSS Selector 选择后代元素的语法是这样的
元素1 元素2
元素1 元素2
也支持更多层级的选择, 比如
元素1 元素2 元素3 元素4
元素1 元素2 元素3 元素4
如果 元素2 是 元素1 的 直接子元素, CSS Selector 选择子元素的语法是这样的
元素1 > 元素2
元素1 > 元素2
也支持更多层级的选择, 比如
元素1 > 元素2 > 元素3 > 元素4
元素1 > 元素2 > 元素3 > 元素4
根据属性选择
语法是用一个方括号 [] 。
示例
选择语法联合使用
示例
div.footer1 > span.copyright
也可以更简单:
.footer1 > .copyright
.footer1 > .copyright
当然 这样也是可以的:
.footer1 .copyright
.footer1 .copyright
组选择
同时选择所有class 为 plant 和 class 为 animal 的元素。怎么办?
示例
父元素
父元素的第几个某类型的子节点
nth-of-type
父元素的倒数第n个子节点
p:nth-last-child(1)
就是选择第倒数第1个子元素,并且是p元素
就是选择第倒数第1个子元素,并且是p元素
父元素的第n个子节点
第2个子元素,并且是span类型
所以这样可以这样写 span:nth-child(2) ,
所以这样可以这样写 span:nth-child(2) ,
如果你不加节点类型限制,直接这样写 :nth-child(2)
nth-child
父元素的倒数第几个某类型的子节点
奇数节点和偶数节点
兄弟节点选择
后续所有兄弟节点选择
如果要选择是 选择 h3 后面所有的兄弟节点 span,可以这样写 h3 ~ span
如果要选择是 选择 h3 后面所有的兄弟节点 span,可以这样写 h3 ~ span
还有一种思考方法,就是选择 h3 后面紧跟着的兄弟节点 span。
这就是一种 相邻兄弟 关系,可以这样写 h3 + span
表示元素 紧跟关系的 是 加号
这就是一种 相邻兄弟 关系,可以这样写 h3 + span
表示元素 紧跟关系的 是 加号
frame切换/窗口切换
切换到frame
使用 WebDriver 对象的 switch_to 属性,像这样
wd.switch_to.frame(frame_reference)
wd.switch_to.frame(frame_reference)
wd.switch_to.frame(wd.find_element_by_tag_name("iframe"))
示例
切换回来:wd.switch_to.default_content()
切换到新的窗口
可以使用Webdriver对象的switch_to属性的 window方法,如下所示:
wd.switch_to.window(handle)
wd.switch_to.window(handle)
示例
# mainWindow变量保存当前窗口的句柄
mainWindow = wd.current_window_handle
#通过前面保存的老窗口的句柄,自己切换到老窗口
wd.switch_to.window(mainWindow)
mainWindow = wd.current_window_handle
#通过前面保存的老窗口的句柄,自己切换到老窗口
wd.switch_to.window(mainWindow)
选择框
Radio
radio框选择选项,直接用WebElement的click方法,模拟用户点击就可以了。
示例
checkbox框
先把 已经选中的选项全部点击一下,确保都是未选状态
再点击 想要勾选的
再点击 想要勾选的
示例
select框
radio框及checkbox框都是input元素,只是里面的type不同而已。
Select类
select_by_value
select_by_index
根据选项的 次序 (从1开始),选择元素
根据选项的 次序 (从1开始),选择元素
select_by_visible_text
根据选项的 可见文本 ,选择元素。
根据选项的 可见文本 ,选择元素。
deselect_by_value
根据选项的value属性值, 去除 选中元素
deselect_by_index根据选项的次序,去除 选中元素
deselect_by_visible_text根据选项的可见文本,去除 选中元素
deselect_all
去除 选中所有元素
根据选项的value属性值, 去除 选中元素
deselect_by_index根据选项的次序,去除 选中元素
deselect_by_visible_text根据选项的可见文本,去除 选中元素
deselect_all
去除 选中所有元素
Select单选框
Select多选框
ActionChains 类
更多动作
移动鼠标
比如 鼠标右键点击、双击、移动鼠标到某个元素、鼠标拖拽等。
冻结界面
在 开发者工具栏 console 里面执行如下js代码、
setTimeout(function(){debugger}, 5000)
setTimeout(function(){debugger}, 5000)
弹出对话框
分别是 Alert(警告信息)、confirm(确认信息)和prompt(提示输入)
driver.switch_to.alert.accept()
driver.switch_to.alert.text
如果我们想点击 OK 按钮, 还是用刚才的 accept方法,如下
driver.switch_to.alert.accept()
如果我们想点击 Cancel 按钮, 可以用 dismiss方法,如下
driver.switch_to.alert.dismiss()
driver.switch_to.alert.accept()
如果我们想点击 Cancel 按钮, 可以用 dismiss方法,如下
driver.switch_to.alert.dismiss()
driver.switch_to.alert.send_keys()
其他技巧
获取窗口大小
获取当前窗口标题:driver.title
获取当前窗口URL地址:driver.current_url
截屏:driver.get_screenshot_as_file('1.png')
手机模式:desired_capabilities 参数
上传文件:是通过 type 属性 为 file 的 HTML input 元素实现的。
Xpath选择器
简介
路径选择
绝对路径
elements = driver.find_elements_by_xpath("/html/body/div")
相对路径
elements = driver.find_elements_by_xpath("//div//p")
elements = driver.find_elements_by_css_selector("div p")
通配符
选择器
根据属性选择:[@属性名='属性值']
根据ID选择://*[@id='west']
根据class属性选择://select[@class='single_choice']
根据其他属性://*[@multiple]
属性值包含字符串://*[contains(@style,'color')]
按次序选择
某类型 第几个 子元素
要选择 p类型第2个的子元素,就是
//p[2]
//p[2]
再比如,要选取父元素为div 中的 p类型 第2个 子元素
//div/p[2]
//div/p[2]
第几个子元素
比如 选择父元素为div的第2个子元素,不管是什么类型
//div/*[2]
//div/*[2]
某类型 倒数第几个 子元素
范围选择
组选择、父节点、兄弟节点
组选择
选择父节点
兄弟节点选择:following-sibling::
selenium 注意点
自动化测试框架
API接口测试自动化
0 条评论
下一页