Java自动化测试
目录
一、自动化入门
1️.自动化测试简介
📌 主要应用场景:
2️.自动化测试分类
3️.Web 自动化测试简介
🤖 常用工具:
4️.Selenium + WebDriver 安装说明
✅ 使用 Java + Maven 环境
💡 1. 安装 Selenium 库(Maven 依赖)
💡 2. 安装 WebDriverManager(自动驱动管理)
5️.示例:百度搜索自动化脚本(Java + Selenium)
6️.Selenium + WebDriver 工作原理
🌐 工作流程说明:
📎 附:手动安装 ChromeDriver(可选)
二、自动化函数
1️.元素定位
🔍 常用方式
✅ cssSelectot
✅ XPath
2. 操作测试对象
3️.窗口操作
切换窗口
设置窗口大小
屏幕截图(commons-io 依赖)
关闭窗口
4️.等待机制
💤 强制等待(不推荐)
⏱️ 隐式等待(全局作用)
⏳ 显式等待(推荐)
🔎 ExpectedConditions预定义方法的示例
5️.浏览器导航操作
6️.弹窗处理(Alert)
7️.文件上传
8️.浏览器参数设置
🕶️ 无头模式 + 加载策略
一、自动化入门
1️.自动化测试简介
自动化测试就是使用代码来模拟人类的操作行为,实现自动运行、自动校验测试结果。
📌 主要应用场景:
-
回归测试(频繁执行)
-
重复性测试任务
-
大规模数据驱动测试
2️.自动化测试分类
类型 | 说明 |
---|---|
接口自动化测试 | 针对后端 API 接口的请求、响应进行自动化验证 |
Web 自动化测试 | 模拟用户在浏览器上的点击、输入、跳转等 |
移动端自动化测试 | 模拟用户在 App(如 Android/iOS)上的操作 |
3️.Web 自动化测试简介
Web 自动化测试是自动打开浏览器、访问页面、执行操作(例如百度搜索),用于验证系统界面功能是否正常。
🤖 常用工具:
-
Selenium:主流 Web 自动化测试工具
-
WebDriver:浏览器驱动程序(ChromeDriver、GeckoDriver 等)
4️.Selenium + WebDriver 安装说明
✅ 使用 Java + Maven 环境
💡 1. 安装 Selenium 库(Maven 依赖)
<dependency><groupId>org.seleniumhq.selenium</groupId><artifactId>selenium-java</artifactId><version>4.0.0</version>
</dependency>
💡 2. 安装 WebDriverManager(自动驱动管理)
<dependency><groupId>io.github.bonigarcia</groupId><artifactId>webdrivermanager</artifactId><version>5.8.0</version><scope>test</scope>
</dependency>
🛠️ WebDriverManager 会自动帮你下载并配置适合你本地浏览器版本的驱动,无需手动安装 chromedriver.exe!
5️.示例:百度搜索自动化脚本(Java + Selenium)
import org.openqa.selenium.*;
import org.openqa.selenium.chrome.*;
import io.github.bonigarcia.wdm.WebDriverManager;public class Demo {public static void main(String[] args) {// 自动配置 Chrome 驱动WebDriverManager.chromedriver().setup();// 浏览器启动配置ChromeOptions options = new ChromeOptions();options.addArguments("--remote-allow-origins=*");// 启动浏览器WebDriver driver = new ChromeDriver(options);// 访问百度首页driver.get("https://www.baidu.com");// 输入关键词driver.findElement(By.id("kw")).sendKeys("鸡你太美");// 点击“百度一下”按钮driver.findElement(By.id("su")).click();// 关闭浏览器driver.quit();}
}
6️.Selenium + WebDriver 工作原理
[Selenium 脚本] ➜ [WebDriver 驱动] ➜ [浏览器]↑ ↓接收执行结果 ◄─────────────── 执行脚本
🌐 工作流程说明:
-
Selenium 脚本创建一个 WebDriver 服务
-
WebDriverManager 安装合适的驱动(如 chromedriver)
-
脚本通过 HTTP 向浏览器驱动发送请求(打开网页、输入文本等)
-
驱动翻译请求并操作浏览器
-
浏览器执行操作并返回结果
📎 附:手动安装 ChromeDriver(可选)
如果不使用 WebDriverManager,你也可以手动安装:
-
查看本地 Chrome 浏览器版本
-
访问:https://chromedriver.chromium.org/downloads
-
下载对应版本的
chromedriver
-
解压后放入系统环境变量
PATH
中
二、自动化函数
1️.元素定位
web自动化测试的操作核心是能够找到页面对应的元素,然后才能对元素进行具体的操作。常见的元素定位方式非常多,如id,classname,tagname,xpath,cssSelector。
🔍 常用方式
-
CSS Selector(推荐)
-
XPath
✅ cssSelectot
选择器的功能:选中页面中指定的标签元素
选择器的种类分为基础选择器和复合选择器,常见的元素定位方式可以通过id选择器和子类选择器来进行定位。
driver.findElement(By.cssSelector("#kw")); // 百度输入框
driver.findElement(By.cssSelector("#su")); // 百度一下按钮
✅ XPath
XML路径语言,不仅可以在XML文件中查找信息,还可以在HTML中选取节点。
xpath使用路径表达式来选择xml文档中的节点。
📌xpath语法:
- 获取html页面所有的节点
//*
- 获取html指定节点
//[指定节点]
//ul:获取html页面所有的ul节点
//input:获取html页面所有的input节点。
- 获取一个节点中的直接子节点
/
//span/input
- 获取一个节点的父节点
..
//input/.. 获取input节点的父节点
- 实现节点属性的匹配
[@....]
//*[@id='kw']匹配html页面中id属性为kw的节点
driver.findElement(By.xpath("//input")); // 获取所有 input 节点
driver.findElement(By.xpath("//*[@id='kw']")); // 精确匹配 id 为 kw 的节点
driver.findElement(By.xpath("//div/ul/li[3]")); // 定位第三个热搜标签
📌 推荐通过开发者工具复制 Selector,但需确保唯一性,必要时手动优化语法。
2. 操作测试对象
操作 | 方法 | 示例 |
---|---|---|
点击 | click() | driver.findElement(...).click(); |
输入 | sendKeys("内容") | driver.findElement(...).sendKeys("搜索内容"); |
清除文本 | clear() | driver.findElement(...).clear(); |
获取文本 | getText() | String text = driver.findElement(...).getText(); |
获取属性值 | getAttribute("attr") | element.getAttribute("value"); |
获取标题 | getTitle() | driver.getTitle(); |
获取URL | getCurrentUrl() | driver.getCurrentUrl(); |
3️.窗口操作
切换窗口
1)获取当前页面句柄:
driver.getWindowHandle();
2)获取所有页面句柄:
driver.getWindowHandles();
3)切换当前句柄为最新页面:
String curWindow = driver.getWindowHandle();
Set<String> allWindow = driver.getWindowHandles();
for(String w : allWindow){if(!w.equals(curWindow)){driver.switchTo().window(w);}
}
注意:执行了driver.close()之前需要切换到未被关闭的窗口。
设置窗口大小
driver.manage().window().maximize(); // 最大化
driver.manage().window().minimize(); // 最小化
driver.manage().window().fullscreen(); // 全屏
driver.manage().window().setSize(new Dimension(1024, 768)); // 自定义
屏幕截图(commons-io
依赖)
<dependency><groupId>commons-io</groupId><artifactId>commons-io</artifactId><version>2.6</version>
</dependency>
File src = ((TakesScreenshot) driver).getScreenshotAs(OutputType.FILE);
FileUtils.copyFile(src, new File("screenshot.png"));
关闭窗口
driver.close();
//注意:窗口关闭后driver需要重新定义
4️.等待机制
💤 强制等待(不推荐)
Thread.sleep(2000); // 毫秒
优点:使用简单,调试的时候比较有效
缺点:影响运行效率,浪费大量的时间
⏱️ 隐式等待(全局作用)
隐式等待是一种智能等待,他可以规定在查找元素时,在指定时间内不断查找元素。如果找到则代码继续执行,直到超时没找到元素才会报错。
driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(5));
隐式等待作用域是整个脚本的所有元素。即只要driver对象没有被释放掉(driver.quit()),隐式等待就一直生效。
- 优点:智能等待
⏳ 显式等待(推荐)
显式等待也是一种智能等待,在指定超时时间范围内只要满足操作的条件就会继续执行后续代码。
WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(10));
wait.until(ExpectedConditions.elementToBeClickable(By.cssSelector("#su")));
🔎 ExpectedConditions预定义方法的示例
-
elementToBeClickable(By) -- 用于检查元素的期望是可见的并以启用,以便可以单击
-
textToBe(By, String) -- 检查元素
-
presenceOfElementLocated(By) -- 检查页面的DOM上是否存在元素
-
urlToBe(String) -- 检查当前页面的URL是一个特定的URL
优点:显式等待是智能等待,可以自定义显式等待的条件,操作灵活
缺点:写法复杂
⚠️ 不建议混用隐式与显式等待,可能导致不可预测的延迟。
5️.浏览器导航操作
driver.get("https://selenium.dev"); // 打开网页
driver.navigate().to("https://selenium.dev"); // 同上
driver.navigate().back(); // 后退
driver.navigate().forward(); // 前进
driver.navigate().refresh(); // 刷新
6️.弹窗处理(Alert)
弹窗主要有警告弹窗,确认弹窗和提示弹窗。
弹窗是在页面是找不到任何元素的,但是可以使⽤selenium提供的Alert接⼝。
Alert alert = driver.switchTo().alert();
alert.accept(); // 确认
alert.dismiss(); // 取消
alert.sendKeys("hello"); // 输入提示信息
7️.文件上传
点击文件上传的场景下会弹出系统窗口,进行文件的选择。
但是selenium无法识别非web控件,上传文件窗口为系统自带,无法识别窗口元素,但是可以使用sendkeys来上传指定路径的文件,达到的效果是一样的。
WebElement ele = driver.findElement(By.cssSelector("input[type='file']"));
ele.sendKeys("D:\\路径\\文件.txt"); // 直接传入本地文件路径
8️.浏览器参数设置
🕶️ 无头模式 + 加载策略
无头模式:后台执行自动化
有头模式:可以看到自动化运行效果
ChromeOptions options = new ChromeOptions();
options.addArguments("--headless"); // 无头模式
options.setPageLoadStrategy(PageLoadStrategy.NONE); // 不等待全部资源加载
加载策略补充:
策略 就绪状态 备注 normal complete 默认值,等待所有资源下载 eager interactive DOM访问已准备就绪,但诸如图像未加载完毕 none Any 完全不会阻塞Webdriver