当前位置: 首页 > web >正文

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 驱动] ➜ [浏览器]↑                                 ↓接收执行结果  ◄───────────────  执行脚本

🌐 工作流程说明:

  1. Selenium 脚本创建一个 WebDriver 服务

  2. WebDriverManager 安装合适的驱动(如 chromedriver)

  3. 脚本通过 HTTP 向浏览器驱动发送请求(打开网页、输入文本等)

  4. 驱动翻译请求并操作浏览器

  5. 浏览器执行操作并返回结果

📎 附:手动安装 ChromeDriver(可选)

如果不使用 WebDriverManager,你也可以手动安装:

  1. 查看本地 Chrome 浏览器版本

  2. 访问:https://chromedriver.chromium.org/downloads

  3. 下载对应版本的 chromedriver

  4. 解压后放入系统环境变量 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();
获取URLgetCurrentUrl()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); // 不等待全部资源加载

加载策略补充:

策略就绪状态备注
normalcomplete默认值,等待所有资源下载
eagerinteractiveDOM访问已准备就绪,但诸如图像未加载完毕
noneAny完全不会阻塞Webdriver

 

http://www.xdnf.cn/news/5772.html

相关文章:

  • 2025年5月13日 奇门遁甲与股市
  • 学习笔记:黑马程序员JavaWeb开发教程(2025.4.3)
  • 麒麟 v10 卸载podman
  • 【大模型MCP协议】MCP官方文档(Model Context Protocol)一、开始——1. 介绍
  • pythonocc 拉伸特征
  • C语言 第六章 结构体(3)
  • 0前言(文章体系)
  • 数字滤波器应用介绍
  • 流体力学绪论(期末复习)
  • 【android bluetooth 框架分析 02】【Module详解 13】【CounterMetrics 模块介绍】
  • 继承关系下创建对象的具体流程
  • 生活破破烂烂,AI 缝缝补补(附提示词)
  • 进程间的通信
  • python-75-Nacos技术之Python+Nacos实现微服务架构
  • 打破效率枷锁,数企云外呼一骑绝尘
  • beyond compare 免密钥进入使用(删除注册表)
  • MacOS 上构建 gem5
  • 排错-harbor-db容器异常重启
  • PCB抄板过程、抄板软件介绍
  • 基于Qt6 + MuPDF在 Arm IMX6ULL运行的PDF浏览器(项目推介)
  • 做为一个平台,给第三方提供接口的时候,除了要求让他们申请 appId 和 AppSecret 之外,还应当有哪些安全选项,要过等保3级
  • BUUCTF Pwn hitcontraining_uaf WP
  • 学习黑客5分钟深入浅出理解系列之Windows注册表
  • Odoo 18 安全组与访问权限管理指南
  • SQLite 数据库常见问题及解决方法
  • 一般纯软工程学习路径
  • 使用达梦数据库官方管理工具SQLark导入与导出数据库表
  • 解决IDEA无法运行git的问题
  • CVE-2020-1957 漏洞报告
  • 基于MCP的智能体架构设计:实现智能体与外部世界的无缝连接