目 录
- 一.什么是自动化
- 二.自动化测试分类
- 三.selenium工具(web自动化测试工具)
- 四.环境部署
- 五.什么是驱动?
- 1.常见的元素操作
- 2.窗口
- 3.执行脚本
- 4.等待
- 5.浏览器的操作
- 6.弹窗
- 7.选择器
- 8.文件上传`
- 9.浏览器参数
一.什么是自动化
有效的减少人力的消耗,同时提高生活的质量
通过自动化测试有效减少人力的投入,同时提高了测试的质量和效率
回归测试,版本越来越多,版本回归的压力越来越大,仅仅通过人工测试来回归所有的版本肯定是不现实的,所以我们需要借助自动化测试
二.自动化测试分类
-
接口自动化测试
-
UI自动化测试(界面测试,分为一下两种)
- 移动端自动化测试
- web端自动化测试(我们目前要学习的)
三.selenium工具(web自动化测试工具)
为什么选择 selenium 作为我们的 web 自动化测试工具?
- 开源免费
- 支持多浏览器。如 Chrome、Firefox、IE浏览器等等~
- 支持多系统。如 Linux、Windows、MacOS
- 支持多语言。(Java Python CSharp Ruby JavaScript Kotlin)
- selenium 包提供了很多可供测试使用的 API
四.环境部署
如果想要使用 selenium 实施 web 自动化测试,需要的环境是什么?
- Chrome浏览器
- 谷歌驱动(ChromeDriver)
- selenium工具包
五.什么是驱动?
汽车有驱动可以让汽车跑起来
计算机也有驱动程序可以驱动计算机和设备工作起来
人工测试的情况下,人来手动的打开浏览器,那么驱动就是人力
自动化来说,代码不能够直接打开浏览器,需要借助驱动程序才能打开浏览器
selenium 编写的自动化脚本是如何打开浏览器 (selenium Driver 浏览器三者之间的关系)
实现一个自动搜索迪丽热巴的自动化脚本
简单自动化示例主要包含五个步骤:
- 创建驱动实例,创建会话
- 访问网站
- 查找元素
- 操作元素
- 结束会话
selenium 常用方法
- 查找页面元素:findElement ()
参数:By 类(提供通过什么方式来查找元素)
返回值:webElement
当元素可以在页面找到的情况下,程序正确退出
当元素在页面找不到的情况下,程序执行报错
- 元素的定位:By类
- selector
基础选择器 / 复合选择器
功能︰选中页面中指定的标签元素
通过开发者工具以及箭头指引 我们可以找到如下搜索框的标签元素,然后进行 copy 复制即可
- xpath
语法:
层级:/子级 //跳级
属性:@
函数::contains()…
自动化里要求元素的定位必须要唯一
但是手动在页面复制 selector 或者 xpath 元素不一定是唯一的,需要我们进行手动修改到唯一
1.常见的元素操作
对元素的操作前提:能够找到元素
上面代码就是在百度浏览器输入 hahaha!!! ,最后返回。
当我们复制好选择器定位元素的方式后,发现数据显示不一定,难道真的重复吗?
前端代码里可能存在其他的代码命令跟关键词重复了,并不是元素定位不唯一
- 输入文本
WebElement ele = driver.findElement(By.cssSelector("#kw"));
ele.sendKeys("hahaha!!!");
或者
driver.findElement(By.cssSelector("#kw")).sendKeys("hahaha!!!");
其中两行没有缩写的代码仅适用于文本字段和内容可编辑的元素(如果反向操作代码也不会报错)
- 点击 click
driver.findElement(By.cssSelector("#kw")).click();
- 提交 submit(仅适用于表单元素)
driver.findElement(By.cssSelector("#su")).submit();
selenium 官方不推荐使用 submit ,更推荐 click。
- 清除 clear
当输入错误的时候可以清除重新再输入
driver.findElement(By.cssSelector("#kw")).clear();
多数使用场景:频繁测试输入是否可以重复输入
- 获取文本
可以通过这个方法获取到元素对应的文本
String text = driver.findElement(By.cssSelector("#s-top-left > div > a")).getText();
System.out.println("获取到的文本 " + text);
但是如果想打印按钮 “百度一下” 这个文本是打印不出来的,因为 “百度一下” 是属于 属性,而不是文本。
获取属性对应的值 getAttribute();
- 获取页面的标题和URL
System.out.println(driver.getTitle());
System.out.println(driver.getCurrentUrl());
2.窗口
- 窗口大小的设置:最大化、最小化、全屏窗口、手动设置窗口大小
- 窗口的切换
打开百度首页,点击图片超链接进入到百度图片首页,获取百度图片页面的“百度一下”按钮,结果报错?
当浏览器每次打开一个标签页的时候,会自动的给每个标签页进行标识(句柄)
哪个是百度首页的句柄?哪个是百度图片首页的句柄?看不出来
当我们打开了好几个窗口,怎么切换呢?基本在自动化中不会遇到
- 屏幕截图(保存现场)
在浏览器中搜索 “蔡徐坤” 之后,转到第二个页面,继续打印人物名字 “蔡徐坤”,发现程序报错!此时就需要所以屏幕截图(保存现场)来保存数据再来打印
此处屏幕保存截图文件需要用到一个包
经过上述操作之后发现还是不行,因为当代码执行到查找结果页的元素时候,页面还没有加载完全,页面渲染的速度和程序执行的速度相比属实小巫见大巫,所以此处就需要在代码里添加等待机制。
当文件名为固定格式(已经存在重名的文件),程序多次执行生成的图片文件会被同名覆盖。所以此时可以将文件名的命名添加动态数据 (时间戳)
3.执行脚本
executeScript ()
4.等待
四种等待:强制等待、,隐式等待、显示等待、流畅等待
- 强制等待:程序阻塞进行,Thread.sleep(),会用到,但是自动化里不能用的特别的多。每一个自动化方法就是一个自动化测试用例。一个用例就需要10s的时间100个用例,1000s;200个用例,2000s。只能接受十几秒或者几分钟之内。
- 隐式等待:隐式等待会作用于driver的整个生命周期
隐式等待会一直轮询判断元素是否存在,如果不存在就等待设置好的时间里不断的进行轮询,直到元素能够被找到- 显示等待:只等待某一行需要等待的元素,避免在其他代码行去等待浪费时间
显示等待和隐式等待不能同时使用,同时使用可能会出现意想不到的等待结果
有时候隐式等待和显示等待不生效/达不到目的的时候可以加上强制等待
5.浏览器的操作
浏览器的前进、后退、刷新
6.弹窗
弹窗的类型:警告弹窗、确认弹窗、提示弹窗
-
警告弹窗:
-
确认弹窗:
-
提示弹窗:
处理弹窗的步骤:
- 将driver对象作用到弹窗上(切换到弹窗)
driver. switchTo.alert()
- 选择 确认
accept()
/ 取消dismiss()
(提示弹窗输入文本)sendKeys ()(在页面上看不到输入文本的执行效果)
虽然警告弹窗只有确认按钮,注意:accept和dismiss都能处理
虽然警告弹窗和确认弹窗都没有输入文本的地方,但如果要执行 alert.sendKeys
代码也不会报错
7.选择器
选项的选择方式
- 根据文本来选择
- 根据属性值来选择
- 根据序号来选择
8.文件上传`
sendKeys("本地文件路径+文件")
9.浏览器参数
实际在工作中,测试人员将自动化部署在机器上自动的执行,测试人员不会每次都一直盯着自动化执行的过程,而是直接查看自动化执行的结果。
无头模式
浏览器的参数设置需要在创建浏览器对象之前