Selenium自动化测试一些应用点
文章目录
一、基础应用
1.上传与下载
1.普通上传:通过input + 本地文件路径
2.插件上传:Flash、JS、Ajax技术上传
3.下载:browser.download.folderList
可以设置Firefox下载路径
download.default_directory
设置Chrome下载路径
4.下载文件比对:通过MD5数据比对下载文件和标准文件的差异
2.Cookies
1.Cookies中数据是以字典形式存放
3.截图验证方式
通过截图比对验证效果,利用pillow包,进行像素对比,差异值在一定范围即可。
4.滑块操作
i. 定位滑块
ii. 获取滑块的宽高 element.size['width']
, element.size['height']
iii. 根据宽高移动对应的像素值
5.颜色验证
login_button_bg_color = Color.from_string(driver.find_element(By.ID, "login").value_of_css_property('background-color'))
二、高级应用
1.利用JS脚本修改页面属性
driver = webdriver.Chrome()
js_cmd = 'document.getElementById("id1").removeAttribute("readonly")'
driver.execute_script(js_cmd)
- 通过
removeAttribute()
移除了readonly属性
2.滑动相关
driver = webdriver.Chrome()
js_cmd_1 = 'window.scrollTo(x,y)' # x代表横向,y代表纵向
# document.body.scrollHeight 滑动到底部
# document.body.scrollWidth 滑动到最右边
ele = driver.find_element_by_id("id1")
js_cmd_2 = 'arguments[0].scrollIntoView();' # 滑动到指定元素
driver.execute_script(js_cmd_2, ele)
3.启动参数
driver = webdriver.Chrome()
options = webdriver.ChromeOptions()
# 网页最大化
options.add_argument("--start-maximized")
# 指定编码格式
options.add_argument("lang=zh_CN.UTF-8")
# 不同版本浏览器可以通过该参数设置driver版本
options.add_argument("executable_path='c:\\python\chromedriver.exe'")
# 无头模式(无界面模式)
options.add_argument("headless")
# 页面加载模式
caps["pageLoadStrategy"] = "normal"
options.add_argument("headless")
driver = webdriver.Chrome(chrome_options=options, desired_cpabilities=caps)
- 此外还有禁止图片加载、代理服务器等方式可以设置
- 页面加载策略包含:
- normal: 正常整个页面加载完成和子资源解析完成
- eager:等待初始HTML文档加载和解析完,放弃加载样式表、图像和子框架
- none:在页面加载但是解析未完成
4.异常的出现与问题分析
4.1 NosuchElementException
查找元素不存在,分析方向:
1.xpath 路径是否正常,定位是否准确
2.页面或者元素加载延迟,可能和网络带宽、访问页数据量有关,合理使用等待机制
3.确实存在BUG
4.2 ElementNotVisibleException
与不可见网页元素交互,分析方向:
1.借助JS代码来实现交互
2.Selenium可以判断页面元素是否真的显示在显示屏上,所以可能是BUG,得与开发交流
三、等待机制
3.1 影响页面元素加载的因素
- 计算机性能,低性能渲染页面会慢
- 被测系统的服务器性能
- 浏览器性能,不同浏览器执行JS脚本性能差距大,不建议用Selenium做浏览器的兼容性测试
- 网络因素,一般出现问题的最主要因素。若被测系统大量使用了Ajax,对网络要求会很高
3.2 强制等待
- 一般使用
time.sleep(2)
的形式称之为强制等待 - 设置页面加载超时
driver = webdriver.Chrome()
driver.set_page_load_timeout(2)
3.3 隐性等待
- 约定时间内持续监测,找到就进行后续操作
driver.implicitly_wait(10)
- 隐性等待作用于webdriver整个生命周期
- 隐性等待需要整个页面加载完成,对于分块加载的页面会增加测试市场
- 会干扰显性等待
3.4 显性等待
语法格式
WebDriverWait(driver,超时时长,调用频率(每隔多长时间检测一下,默认0.5秒),忽略的异常类型).until(可执行的方法, 超时后返回的提示信息)
- WebDriverWait类和expected_conditions实现显性等待
四、Selenium Grid
4.1 适用场景
- 兼容性测试,同时在不同浏览器、操作系统、计算机上执行测试用例
- 减少执行的时间
启动方式: 命令行、借助JSON配置文件、利用Docker启动