✏️作者:银河罐头
系列专栏:JavaEE
“种一棵树最好的时间是十年前,其次是现在”
自动化测试就是将人工测试手段进行转换,让代码去执行。
自动化测试分类:
单元测试,接口自动化,UI自动化。
Selenium 是 web 应用中基于 UI 的自动化测试框架。
支持多平台、多浏览器、多语言(如java,C#,Python,Ruby), 有丰富的 API。
windows电脑环境搭建-chrome浏览器
https://chromedriver.chromium.org/downloads
解压下载好的驱动压缩包,将下载好的chromedriver.exe放到java系统环境变量下.
<dependencies>
<dependency>
<groupId>org.seleniumhq.seleniumgroupId>
<artifactId>selenium-javaartifactId>
<version>3.141.59version>
dependency>
dependencies>
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");
}
}
如果打开了浏览器,此时说明安装成功。
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("软件测试");
}
}
运行:
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();
}
如果点击的元素放在 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);
}