点击这里学习更多自动化测试知识 ->>>查看详情
什么是selenium
简单来说selenium是一个基于web端的UI自动化测试组件,模拟用户操作去控制浏览器自动运行,支持多语言目前主流就是python,Java,支持多浏览器chrome、ie、firefox等。
Selenium工作原理
1.运行自动化测试脚本,向web service发送一个http请求
2.浏览器驱动中的web service 会根据这个请求生成对应的js脚本,因为不同的浏览器,不同的浏览器要有不同的驱动
3.js脚本驱动浏览器,产生各种操作,并返回给web service
4.web service将结果通过http响应的形式返回给客户端
自动化测试环境搭建
Python+selenium+chrome百度一下配置安装,过程比较简单,注意chrome浏览器版本和对应chromedriver.exe驱动版本,版本对应情况可百度
打开浏览器
导入selenium下的webdriver类,调用打开浏览器方法,不同的浏览器需要不同的驱动否则会报错打不开
使用无界面模式打开浏览器,add_argument方法中加入--headless参数,添加到Chrome方法的options参数中
打开浏览器为手机模式
浏览器窗口最大化、设置窗口尺寸
maximize_window()方法当前打开窗口最大化
set_window_size(width,height)设置浏览器窗口尺寸
打开网页
1、调用webdriver下的get方法传入网页链接参数
同一个浏览器中打开两个网页需运行js脚本打开网页,调用webdriver中execute_script(),传入js脚本即可,默认在当前第一个网址页面,需切换浏览器窗口
切换浏览器窗口
Window_handles: 获取当前打开浏览器中所有窗口句柄,返回一个列表
Current_window_handle: 获取当前窗口句柄
Switch_to.window(): 切换到那个窗口句柄,传入窗口句柄字段
查找页面元素
1、webdriver类中包含多种方法去查找页面元素,id、xpath、name、text、css、class等,注意定位页面元素是路径必须是页面唯一的一个否则定位不到页面元素
页面:
使用所有方法定位百度输入框:一般常用的id、xpath、css定位比较准确,xpath、css可以手动书写路径表达式,其他的name、class、text、tag_name只能在页面是唯一的时候使用
关于find_element 和 find_elements的区别:前者是查找一个元素,后者是查找一组元素,返回一个列表
输入、清除、点击
找到页面输入框元素路径,send_keys()方法传字符串,输入字段
clear()方法清除输入框字段
找到页面按钮元素路径,掉用click()方法点击
接受、取消页面警告弹窗
switch_to.alert.accept()切换到弹窗使用accept()方法确认、dismiss()方法取消警告
获取页面文本、网页title、元素属性、页面url
查找页面文本对应路径,使用text方法获取
title方法直接获取页面title字段
获取元素属性,get_attribute()方法传入属性对应key
直接使用current_url方法获取当前页面url返回字符串
切换frame
有时候页面元素在frame框下,需要先切换到iframe中才能执行操作,否则直接定位页面元素,会报错找不到元素位置
Webdriver中switch_to.frame()方法切换
切换出frame: switch_to.default_content()
截图功能
get_screenshot_as_file(filename)传入图片保存位置
操作select下拉框选项
1、操作Select下拉选择框webdriver中有专用的方法去选中,需导入Select方法
from selenium.webdriver.support.select import Select
定位到select选择框位置,Select()传入元素获取的元素路径位置调用下面的选择方法去选中所要的值
select_by_index() :通过索引定位,以0开始
select_by_value() :通过value值定位
select_by_visible_text() :通过文本值定位
deselect_all():取消所有选项
deselect_by_index() :取消对应index选项
deselect_by_value():取消对应value选项
deselect_by_visible_text():取消对应文本选项
first_selected_option():返回第一个选项
all_selected_options():返回所有的选项
如何操作非Select下拉框呢?思路:先点击展开下拉列表,再获取父元素路径位置获取获取元素下所有标签,循环遍历列表获取文本进行对比,判断是否是要选择项
页面例子:
代码例子选中“最近一周”:
显示等待、隐式等待、强制等待
time.sleep():传入数值,强制等待几秒执行,导入time文件
implicitly_wait(10):隐式等待,是设置的全局等待,设置等待时间,是对页面中的所有元素设置加载时间,如果超出了设置时间的则抛出异常
WebDriverWait():显示等待,是针对于某个特定的元素设置的等待时间,在设置时间内,默认每隔一段时间检测一次当前页面某个元素是否存在,如果在规定的时间内找到了元素,则直接执行,即找到元素就执行相关操作,如果超过设置时间检测不到则抛出异常,默认抛出异常为:NoSuchElementException
10s是等待时间,1s是步长每隔几秒检测一次,默认0.5s