欢迎 👍点赞 ➕关注 ❤️收藏 💬评论
目录
🍋一、自动化测试的定义
🍏定义
自动化测试是通过代码/工具自动执行测试用例、验证软件功能的过程,核心是用"程序替代人工"完成重复、机械工作,是软件测试的重要技术手段之一。
- 自动化测试类型:接口自动化测试、UI自动化测试、单元自动化测试。
- web自动化测试工具:selenium
🍏添加依赖
驱动管理
XML
<dependency>
<groupId>io.github.bonigarcia</groupId>
<artifactId>webdrivermanager</artifactId>
<version>5.8.0</version>
<scope>test</scope>
</dependency>
安装selenium库
XML
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-java</artifactId>
<version>4.21.0</version>
</dependency>
🍏自动化编写
java
public void test() throws InterruptedException,IOException{
//驱动下载程序
WebDriverManager.chromedriver().setup();
ChromeOptions options=new ChromeOptions();
//允许访问所有连接
options.addArguments("--remote-allow-origins=*");
//打开浏览器
ChromeDriver chromeDriver=new ChromeDriver();
}
🍋二、CssSelector和Xpath
🍎准备操作
1.打开浏览器,点击快捷键F12 ,或者在鼠标键右击 点击**检查,**打开开发者工具。
2.点击Ctrl+f,出现html搜索框

web自动化测试的核心操作 就是在页面中找到对应的元素然后对元素进行操 作,常见的对元素进行操作的方式有cssSelector和Xpath。
🍎cssSelector
原理:基于html元素的标签、id、类名、属性以及层级关系匹配。
元素定位步骤
1.在html页面中选中想要的元素,右击选择copy,点击Copy selector
2.得到相对应的id,示例:#header
在搜索框输入相对应的id,会对应到相应的位置

使用
java
chromeDriver.findElement(By.cssSelector("#search-kw"))
- findElement:查找一个符合条件的元素,其中页面符合条件的元素必须是唯一的,否则可能查找到的结果不一定符合预期;
- findElements:查找全部符合条件的元素;
语法
ID匹配(#):示例#header;

类匹配(.):.btn;
- 属性匹配([]):input[name="phone"]
input[name="phone"]:表示选中所有input标签中,name为"phone"的元素。
- 子节点(">"表示层级):body > script:nth-child(14)
- body > script:表示嵌套在<body>中的<script>标签
- nth-child(14):这是伪类,表示在<body>下的第14个元素,且这个元素是<script>标签

🍎Xpath
原理:基于XML/HTML树形结构的路径遍历。
步骤:与Css selector同理,不同的是,选择Copy Xpath
写法
java
chromeDriver.findElement(By.xpath("//*[@id=\"search-kw\"]"))
语法
-
获取html页面的所有节点://*
-
获取html的指定节点://
示例://div:获取所有div的节点

- 获取一个节点中的直接子节点:/

- 获取一个节点的父节点:..
示例://div/..:获取div的父节点

- 实现节点的属性匹配:[@...]
示例://*[@id="search-frame"]:表示html页面中id属性为"search-frame"的节点

🍋三、等待
原因 :通常代码执行会比页面渲染更快,页面加载未完成时,可能会导致元素定位错误,所以我们有时候需要进行等待。
🍊强制等待
定义
强制等待:直接让程序暂停执行指定时长,不管页面加载,到时间才继续。
语法
java
Thread.sleep();
🍊隐式等待
定义
隐式等待:driver在查找元素时,若元素未立即出现,会循环查询直到元素出现,或超时后抛出NoSuchElementException。
语法
java
chromeDriver.manage().timeouts().implicitlyWait(Duration.ofMillis(1000));
- driver.mange():获取webDriver的"管理接口";
- timeouts:获取"超时配置接口",专门设置各类等待超时时间;
- implicitlyWait(Duration.ofMillis()):设置"隐式等待超时时间"。
🍊显示等待
定义
显示等待:针对单个元素/条件设置等待,指定"超时时间+等待条件",driver会循环查询条件是否满足,满足则继续,否则抛出TimeoutException。
语法
java
WebDriverWait webDriverWait=new WebDriverWait(chromeDriver,Duration.ofSeconds(3));
//设置等待条件并执行
webDriverWait.until(ExpectedConditions.elementToBeClickable(
By.cssSelector("#Famous > table > tbody > tr:nth-child(2) > td:nth-child(7) > a")));
}
- util():一直等待直到满足条件或者超时。
- ExpectedConditions:Selenium 内置的 "等待条件工具类",封装几乎所有常见的等待场景。
- elementToBeClickable():等待目标元素"可以被点击",用于避免"元素存在但不可点击"的报错;
- 当显示等待和隐式等待同时出现,时间会出现叠加现象。
ExpectedConditions其他预定义方法:
- textToBe():等待目标元素的"文本内容"等于指定的str,用于验证元素文本是否符合预期。
- presenceOfElementLocated():等待目标元素"存在于dom中"(不关系元素是否可见/可点击,只要存在html页面中即可),用于确认元素已经加载;
- urlToBe:等待当前页面的url完全等于指定的url,用于验证跳转是否正确。
🍊三种等待的区别
|------|-------------------------|-----------------------------|-----------------------|
| | 强制等待 | 隐式等待 | 显示等待 |
| 作用范围 | 全局 | 全局 | 局部 |
| 等待逻辑 | 无条件(指定固定时长) | 等待,循环直到超时 | 等待自定义添加,循环直到超时 |
| 异常 | 抛InterruptedException | 超时抛NoSuchElementException | 超时抛TimeoutException |
| 使用场景 | 临时调试 | 仅需要元素存在 | 元素状态/页面变化 |
🍋四、操作测试对象
🍑模拟按键输入(sendKeys)
- sendKeys:向输入框、文本域输入内容
语法
java
element.sendKeys("百度");
示例
java
WebElement element= chromeDriver.findElement(By.cssSelector("#search-kw"));
//通过selector选择器定位输入框,输入"百度"
Thread.sleep(3000);
element.sendKeys("百度");
- Thread.sleep(时间):当前线程休眠时间;
🍑点击/提交对象(click)
- click:点击按钮、链接、复选框
语法
java
element.click();
示例
java
chromeDriver.findElement(By.xpath("//*[@id=\"Famous\"]/table/tbody/tr[1]/td[1]/a[1]/span")).click();
🍑清空内容(clear)
- clear:清空输入框已有内容。
语法
java
element.clear();
示例
java
element.sendKeys("百度");
Thread.sleep(5000);
element.clear();
Thread.sleep(5000);
element.sendKeys("百度111");
- 如果没有清空,那么输入框内容将会是"百度百度111"
🍑获取元素文本(getText)
- getText:获取元素可见文本(如按钮文字,标签内容)
语法
java
element.getText();
示例
java
//获取文本信息
Thread.sleep(3000);
String text1=chromeDriver.findElement(By.cssSelector("#dongdong > div > div:nth-child(1) > a:nth-child(4")).getText();
Thread.sleep(3000);
System.out.println("文本信息:"+text1);

🍑获取元素属性(getAttribute)
- getAttribute:获取元素的属性值,例如input的value。
语法
java
element.getAttribute("value");
示例
java
//获取属性值
Thread.sleep(3000);
WebElement btn=chromeDriver.findElement(By.cssSelector("#search-form > div > input[type=hidden]:nth-child(1)"));
Thread.sleep(3000);
//尝试使用getText获取(结果无法获取)
System.out.println("text2:"+btn.getText());
//获取属性值(获取成功)
System.out.println(btn.getAttribute("value"));

结果:

🍑获取当前页面标题(getTitle)
语法
java
driver.getTitle();
示例
java
//获取页面标题
String title=chromeDriver.getTitle();
System.out.println("页面标题:"+title);
🍑获取当前页面(getCurrentUrl)
语法
java
driver.getCurrentUrl();
示例
java
//获取页面url
String url=chromeDriver.getCurrentUrl();
System.out.println(url);
结果

