自动化测试📪selenium
自动化测试📪selenium
测试是一个软件或者程序运行的保障,想要一个程序得到预期效果不可避免地会进行一些测试,常见的测试有很多,比如:黑盒测试,白盒测试,灰盒测试,单元测试,回归测试等等,这些测试都是对于代码方向上的分类标准,而对于代码的运行模式又分为两种模式。
- 手工测试
- 自动化测试
这两类测试的区别相信自己从字眼中可以看出区别。
两类测试的应用领域:
手工测试:不经常使用到的一些功能
自动化测试:操作重复性高的功能
接下来主要介绍自动化测试中的selenium的使用。
自动化测试📑
自动化测试中会经常使用到自动化测试框架,而selenium
是用于对web自动化测试的一个框架,其作用范围广泛原因就是selenium
的特点。
- 支持各种浏览器
- 支持各种系统平台
- 支持各种计算机语言
- 有非常丰富的
API
要认识selenium
首先要认识其工作原理,才可以更加正确的认识和使用。
自动化脚本 ----> 浏览器驱动 -----> 浏览器
那么具体是如何实现一个自动化脚本呢?
selenium定位元素📍
selenium
定位元素常用的两种方法:
- CSS选择器
- Xpath选择器
在网页上的操作:
copy element: 拷贝这一个元素中所有内容
copy outerHTML:拷贝这一条HTML语句
copy selector : css选择器
copy JS path: 拷贝js路径
copy styles : 拷贝样式
copy Xpath :拷贝相对路径
copy full Xpath : 拷贝绝对路径
CSS选择器
使用的是CSS
语法进行元素定位,常见的有以下几种:
- id选择器
- 类选择器
- 后代选择器
- 标签选择器
- ……
而对于Xpath选择器
有以下两种:
- 相对路径【以
//
开始】- 绝对路径
针对相对路径和绝对路径,推荐使用相对路径,原因是相对路径效率高,因为效率高,所以也经常使用,对于绝对路径来说,效率低,想要查找一个元素时要从底层目录开始查找,不太可观。
而相对路径中又被细分为四种匹配模式:
相对路径 + 索引(下标)匹配
例如:
//from/span[1]/input
意思是定位到from标签中第一个span标签中的input标签相对路径 + 属性值
例如:
//input[class='s_ipt']
意思是定位到一个input标签使用了s_ipt
类相对路径 + 通配符
例如:
//*[@*='su']
定位到所有使用了su
的元素相对路径 + 文本匹配
例如:
//a[text = '新闻]
定位到a标签中文本内容为“新闻”的元素
两个选择器的对比CSS选择器
的效率更高。
实战测试百度搜索🔍
安装测试环境
测试浏览器:chrome
使用语言:Java
首先安装一个chrome浏览器:
安装之后查看浏览器版本:
再根据浏览器版本下载一个chromeDriver
.
根据电脑的系统选择相对的版本:
下载之后解压,然后配置Java的环境变量(已经配置可以略过):
将解压后的文件加入配置好的jdk
的bin
目录下:
Idea中进行自动化脚本编写
首先需要创建一个maven项目
在pom.xml
中添加包并刷新maven
仓库。
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-java</artifactId>
<version>3.141.59</version>
</dependency>
创建一个Main.class
文件。在Main中创建一个main
函数直接调用方法即可。
打开网页:
//这段代码的主要功能是确认浏览器和输入浏览器打开的网页
public static void test01()throws InterruptedException {
//支持的浏览器启动
ChromeOptions options = new ChromeOptions();
//允许读取所有请求
options.addArguments("--remote-allow-origins=*");
//注册驱动
WebDriver webDriver = new ChromeDriver(options);
//打开百度首页
webDriver.get("https://www.baidu.com");
}
实现搜索功能:
有预期结果和实际结果之间的对比打印。
public static void test01()throws InterruptedException {
ChromeOptions options = new ChromeOptions();
//允许读取所有请求
options.addArguments("--remote-allow-origins=*");
WebDriver webDriver = new ChromeDriver(options);
//打开百度首页
webDriver.get("https://www.baidu.com");
//使用css选择器来寻找
// WebElement element = webDriver.findElement(By.cssSelector(".s_ipt"));
//使用xpath选择器来寻找
WebElement element = webDriver.findElement(By.xpath("//*[@id=\"kw\"]"));
//输入软件测试
element.sendKeys("软件测试");
//找到百度搜索然后进行点击操作
webDriver.findElement(By.cssSelector("#su")).click();
//为了观察效果,强制休眠 3 秒
sleep(3000);
//校验
//找到搜索结果
List<WebElement> elements = webDriver.findElements(By.cssSelector("a em"));
for (int i = 0; i < elements.size(); i++) {
System.out.println(elements.get(i).getText());
//如果返回结果包含软件测试,证明测试通过,直接结束本次搜索测试
if(elements.get(i).getText().contains("软件测试")){
System.out.println("测试通过");
return;
}
}
//如果不通过就不会退出函数,而会打印这个内容
System.out.println("测试不通过");
}
浏览器清空效果clear()
:
public static void test02() throws InterruptedException {
ChromeOptions options = new ChromeOptions();
options.addArguments("--remote-allow-origins=*");
WebDriver webDriver = new ChromeDriver(options);
webDriver.get("https://www.baidu.com");
webDriver.findElement(By.cssSelector("#kw")).sendKeys("软件测试");
//点击
webDriver.findElement(By.cssSelector("#su")).click();
sleep(2000);
//清空搜索框
webDriver.findElement(By.cssSelector("#kw")).clear();
//重新填写搜索词
webDriver.findElement(By.cssSelector("#kw")).sendKeys("前端Vue");
//点击
webDriver.findElement(By.cssSelector("#su")).click();
}
获取元素名称
private static void test04() {
ChromeOptions options = new ChromeOptions();
options.addArguments("--remote-allow-origins=*");
WebDriver webDriver = new ChromeDriver(options);
webDriver.get("https://www.baidu.com/");
//获取元素中'value'的值
String text = webDriver.findElement(By.cssSelector("#su")).getAttribute("value");
System.out.println(text.equals("百度一下")?"测试通过":"测试不通过");
}