自动化测试
selenium
1. 为什么使用selenium?
- 开源免费
- 支持多浏览器
- 支持多系统
- 支持多语言编程
- 提供了丰富的
web
自动化测试API
2. API
- 查找页面元素
find Element()
find Elements()
- 元素定位的方式
xpath
selector
通常情况下,不需要手动来编写xpath或者selector,选择页面元素后复制粘贴
自动化里要求元素的定位必须是唯一,如果复制出来的元素在页面不唯一,需要手动的进行小范围的修改
- 常见的元素的操作
对元素的操作前提:能够找到元素-
输入文本
sendKeys
(仅适用于文本字段和内容可编辑的元素,如果反向操作代码也不会报错)
-
点击
click
-
提交
submit
(通过回车键提交)selenium官方不推荐使用submit
仅适用于表单元素 -
清除
clear
频繁测试输入框是否可以重复输入 -
获取文本
getText
通过getText()方法获取不到百度页面 按钮上的”百度一下“文字,这是为什么?
区分文本
和属性
-
获取属性对应的值
getAttribute
-
获取标题和URL
getTitle
getCurrentUrl
-
System.out.println(driver.getTitle());
System.out.println(driver.getCurrentUrl());
-
窗口
-
窗口大小的设置:最大化、最小化、全屏窗口、手动设置窗口大小
全屏的时候,电脑会提示esc退出,但是窗口最大化不会 -
窗口的切换
问题1:打开百度首页,点击图片超链接进入到百度图片首页,获取百度图片页面的”百度一下“按钮,结果报错?
当浏览器每次打开一个标签页的时候,会自动的给每个标签页进行标识(句柄
)
问题2:那么怎么区分哪个是百度首页的句柄?哪个是百度图片首页的句柄?
问题3:如何跳转到百度首页的句柄?
问题4:当我们打开了好几个窗口,怎么切换呢?
自动化基本没有这样的场景~ -
屏幕截图
问题1:当代码执行到查找结果页的元素时候,页面还没有加载完全。
程序执行的速度 和 页面渲染的速度 谁快?(当然是程序执行速度)
所以当程序执行的时候我们需要在代码里面添加等待机制
问题2:当文件名为固定格式(已经存在重名的文件),程序多次执行生成的图片文件会被同名覆盖
这时可以将文件名的命名添加动态数据(时间戳)
-
-
执行脚本
executeScript()
参数:js代码 -
等待
-
强制等待(程序阻塞进行)
Thread.sleep()
会用到,但是自动化里不能用的特别多。每一个自动化方法就是一个自动化测试用例。只能接受十几秒或者几分钟之内 -
隐式等待
隐式等待会作用于driver的整个生命周期,会一直轮询判断元素是否存在,如果不存在就等待设置好的时间里不断的进行轮询,直到元素能够被找到。 -
显示等待
-
WebDriverWait(WebDriver,Duration)
-
浏览器的操作
浏览器的前进、后退、刷新
-
弹窗
处理弹窗的步骤:
(1)将driver对象作用到弹窗上(切换到弹窗)driver.switchTo.alert()
(2)选择确认(accept()
)/取消(dismiss()
)(提示弹窗多了一个输入文本sendKeys()
)
虽然警告弹窗只有确认按钮,注意:accept和dismiss都能处理
虽然警告弹窗和确认弹窗都没有输入文本的地方,但如果要执行alert.sendKeys代码也不会报错~~ -
选择器
选项的选择方式
(1)根据文本来选择
// 先创建选择框对象
Select select = new Select(ele);
// 根据文本来选择
select.selectByVisibleText("UPS Next Day Air ⇒ $12.51");
(2)根据属性值来选择
// 根据属性值来选择
select.selectByValue("12.51");
(3)根据序号来选择
序号是从0开始
// 根据序号来选择
select.selectByIndex(1);
- 文件上传
sendKeys("文件路径 + 文件")
- 浏览器参数
实际在工作中,测试人员将自动化部署在机器上自动的执行,测试人员不会每次都一直盯着自动化执行的过程,而是直接查看自动化执行的结果。- 无头模式
浏览器的参数设置需要在创建浏览器对象之前
- 无头模式