✏️作者:银河罐头
📋系列专栏:JavaEE
🌲“种一棵树最好的时间是十年前,其次是现在”
目录
- 什么是自动化测试?
- Selenium 介绍
- Selenium 是什么
- Selenium 特点
- 工作原理
- selenium+Java环境搭建
- Chrome+Java
- 1.下载chrome浏览器
- 2.查看chrome浏览器版本
- 3.下载chrome浏览器驱动
- 配置环境变量
- 验证环境是否搭建成功
- 1.创建java项目,添加pom文件中添加依赖
- 2.编写代码运行
- selenium 常用 API
- 元素的定位
- css 定位
- xpath 定位
- 操作测试对象
- 添加等待
- 强制等待
- 隐式等待
- 打印信息
什么是自动化测试?
自动化测试就是将人工测试手段进行转换,让代码去执行。
自动化测试分类:
单元测试,接口自动化,UI自动化。
Selenium 介绍
Selenium 是什么
Selenium 是 web 应用中基于 UI 的自动化测试框架。
Selenium 特点
支持多平台、多浏览器、多语言(如java,C#,Python,Ruby), 有丰富的 API。
工作原理
selenium+Java环境搭建
Chrome+Java
windows电脑环境搭建-chrome浏览器
1.下载chrome浏览器
2.查看chrome浏览器版本
3.下载chrome浏览器驱动
https://chromedriver.chromium.org/downloads
配置环境变量
解压下载好的驱动压缩包,将下载好的chromedriver.exe放到java系统环境变量下.
验证环境是否搭建成功
1.创建java项目,添加pom文件中添加依赖
<dependencies>
<!-- https://mvnrepository.com/artifact/org.seleniumhq.selenium/selenium-java -->
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-java</artifactId>
<version>3.141.59</version>
</dependency>
</dependencies>
2.编写代码运行
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;
public class Main {
public static void main(String[] args) {
ChromeOptions options = new ChromeOptions();
options.addArguments("--remote-allow-origins=*");
WebDriver webDriver = new ChromeDriver(options);
webDriver.get("https://www.baidu.com");
}
}
如果打开了浏览器,此时说明安装成功。
selenium 常用 API
元素的定位
css 定位
public class Main {
public static void main(String[] args) {
ChromeOptions options = new ChromeOptions();
//允许所有请求
options.addArguments("--remote-allow-origins=*");
WebDriver webDriver = new ChromeDriver(options);
//打开百度首页
webDriver.get("https://www.baidu.com");
//找到百度搜索输入框
WebElement element = webDriver.findElement(By.cssSelector(".s_ipt"));
//输入软件测试
element.sendKeys("软件测试");
}
}
运行:
xpath 定位
public class Main {
public static void main(String[] args) {
ChromeOptions options = new ChromeOptions();
//允许所有请求
options.addArguments("--remote-allow-origins=*");
WebDriver webDriver = new ChromeDriver(options);
//打开百度首页
webDriver.get("https://www.baidu.com");
//找到百度搜索输入框
//xpath 定位元素
WebElement element = webDriver.findElement(By.xpath("//*[@id=\"kw\"]"));
//输入软件测试
element.sendKeys("软件测试");
}
}
-
绝对路径:/html/head/title (不常用)
-
相对路径:
相对路径 + 索引://form/span[1]/input
相对路径 + 属性值://input[@class=“s_ipt”]
相对路径 + 通配符:// * [@ * =“su”]
相对路径 + 文本匹配://a[text()=“新闻”]
public class Main {
public static void main(String[] args) throws InterruptedException {
test01();
}
private 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();
sleep(3000);
//校验
List<WebElement> elements = webDriver.findElements(By.cssSelector("a em"));
int flag = 0;
for(int i = 0;i < elements.size();i++){
if(elements.get(i).getText().contains("测试")){
flag = 1;
System.out.println("测试通过");
break;
}
}
if(flag == 0){
System.out.println("测试不通过");
}
}
}
css 选择器定位元素效率更高。
操作测试对象
-
click 点击对象
-
send_keys 在对象上模拟按键输入
-
clear 清除对象输入的文本内容
private 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(3000);
//清空百度搜索输入框中的数据
webDriver.findElement(By.cssSelector("#kw")).clear();
}
- submit 提交
如果点击的元素放在 form 标签中,使用 submit 和 click 效果一样。
如果点击的元素不在 form 标签中,此时使用 submit 会报错。
//会报错,因为点击的是"新闻"超链接,它没有放在 form 标签中
private static void test03() {
ChromeOptions options = new ChromeOptions();
//允许所有请求
options.addArguments("--remote-allow-origins=*");
WebDriver webDriver = new ChromeDriver(options);
//打开百度首页
webDriver.get("https://www.baidu.com");
webDriver.findElement(By.xpath("//a[text()=\"新闻\"]")).submit();
}
-
text 用于获取元素的文本信息
-
getAttribute: 获取元素属性的值。
像"软件测试"这样的可以通过.getText()来获取文字内容。
而"百度一下"这个按钮不能通过 .getText() 来获取文字内容。
private static void test04() {
ChromeOptions options = new ChromeOptions();
//允许所有请求
options.addArguments("--remote-allow-origins=*");
WebDriver webDriver = new ChromeDriver(options);
//打开百度首页
webDriver.get("https://www.baidu.com");
String button_value = webDriver.findElement(By.cssSelector("#su")).getText();
System.out.println(button_value);
}
没有打印 “百度一下” 这个按钮的文本内容。
如果要想打印"百度一下" 这个按钮的文本内容,可以通过 getAttribute()
private static void test04() {
ChromeOptions options = new ChromeOptions();
//允许所有请求
options.addArguments("--remote-allow-origins=*");
WebDriver webDriver = new ChromeDriver(options);
//打开百度首页
webDriver.get("https://www.baidu.com");
String button_value = webDriver.findElement(By.cssSelector("#su")).getAttribute("value");
System.out.println(button_value);
}
添加等待
强制等待
sleep();
隐式等待
隐式等待和显式等待都是智能等待。
如果等待时间 3 天时间,强制等待会一直等待,等待的时间 3 天。
隐式等待,最多等 3 天,如果在 这 3 天之内获取到了页面上的元素,就会往下执行代码;如果等待 3 天还没有找到这个元素就会报错。
private 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")).submit();
// sleep(30000000);
webDriver.manage().timeouts().implicitlyWait(3, TimeUnit.DAYS);
//清空百度搜索输入框中的数据
webDriver.findElement(By.cssSelector("#kw")).clear();
}
sleep(30000000); 效果是 输入框输入 软件测试后 一直死等 30000000 ms.
webDriver.manage().timeouts().implicitlyWait(3, TimeUnit.DAYS);
效果是只要输入框一输入完软件测试,就执行下面的代码,clear(). 没有等待。
显式等待可以让他指定去等待某一个元素。
打印信息
打印 title
打印 url
private static void test05() {
ChromeOptions options = new ChromeOptions();
//允许所有请求
options.addArguments("--remote-allow-origins=*");
WebDriver webDriver = new ChromeDriver(options);
//打开百度首页
webDriver.get("https://www.baidu.com");
String url = webDriver.getCurrentUrl();
String title = webDriver.getTitle();
System.out.println("title: " + title + " url: " + url);
}