在上一篇中,我们梳理了自动化测试的适用场景、回归测试的核心地位,以及 Web 自动化的基础 ——WebDriver 驱动与 WebDriverManager 环境配置。当环境准备就绪后,我们就需要一款成熟的工具来编写自动化脚本,这就是 Web 自动化领域的主流框架:Selenium。
本文将从工具介绍、实战案例、底层原理到适用边界,系统带你入门 Selenium,完成第一个可运行的自动化测试用例。
一、认识 Selenium
Selenium 是一款开源的 Web 自动化测试工具,核心原理基于浏览器驱动协议(B/S 架构)与客户端 - 服务端通信模型(C/S 架构)。它提供了丰富的 API 与操作方法,支持多语言、多浏览器,能够模拟真实用户在浏览器中的点击、输入、跳转等全部交互行为,是当前 Web UI 自动化测试领域应用最广泛的框架。
接下来我们通过一个经典的 “百度搜索迪丽热巴” 案例,快速上手 Selenium 的基础使用。
二、实战案例:实现百度搜索自动化
我们以「打开浏览器 → 访问百度 → 输入关键词 → 点击搜索」的完整流程为例,一步步完成第一个自动化脚本。
1. 引入 Selenium 依赖
在 Java Maven 项目的pom.xml中引入 Selenium Java 核心依赖,结合上一篇介绍的 WebDriverManager,即可无需手动下载驱动,快速完成基础环境准备:
<!-- Selenium Java 核心依赖 --> <dependency> <groupId>org.seleniumhq.selenium</groupId> <artifactId>selenium-java</artifactId> <version>4.0.0</version> </dependency> <!-- WebDriverManager 驱动自动管理 --> <dependency> <groupId>io.github.bonigarcia</groupId> <artifactId>webdrivermanager</artifactId> <version>5.8.0</version> <scope>test</scope> </dependency>2. 编写自动化测试代码
创建测试类,通过 Selenium API 完成完整的搜索操作:
import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.chrome.ChromeDriver; import org.openqa.selenium.chrome.ChromeOptions; import io.github.bonigarcia.wdm.WebDriverManager; public class BaiduSearchTest { public void searchTest() { // 自动匹配并下载对应版本的 Chrome 驱动 WebDriverManager.chromedriver().setup(); ChromeOptions options = new ChromeOptions(); // 允许跨域远程访问,规避部分环境的请求拦截问题 options.addArguments("--remote-allow-origins=*"); // 1. 启动 Chrome 浏览器 WebDriver driver = new ChromeDriver(options); // 2. 访问百度首页 driver.get("https://www.baidu.com"); // 3. 通过 XPath 定位搜索输入框,输入关键词“迪丽热巴” driver.findElement(By.xpath("//*[@id=\"kw\"]")).sendKeys("迪丽热巴"); // 4. 定位“百度一下”按钮,执行点击搜索 driver.findElement(By.xpath("//*[@id=\"su\"]")).click(); // 5. 操作完成,关闭浏览器并释放资源 driver.quit(); } }3. 执行测试脚本
通过 main 方法调用测试方法,即可运行完整的自动化流程:
public static void main(String[] args) { BaiduSearchTest test = new BaiduSearchTest(); test.searchTest(); }运行代码后,程序会自动打开 Chrome 浏览器,完成百度搜索的全流程操作,执行效果与人工手动操作完全一致。
三、Selenium 底层原理
看似简单的几行代码,背后是一套完整的通信与驱动链路。整体交互流程可以概括为:Selenium 脚本 ←C/S 通信→ WebDriver 驱动 ←内核接口→ 浏览器 ←B/S 通信→ Web 服务端
完整的执行分为 4 个核心步骤:
驱动启动本地 HTTP 服务脚本执行前,WebDriverManager 会自动匹配并下载对应浏览器版本的驱动(如 chromedriver、geckodriver)。驱动启动后会在本地开启一个 HTTP 服务(基于 localhost + 随机端口),作为服务端接收 Selenium 脚本的指令请求。
客户端发送操作指令我们编写的每一行 Selenium 操作代码,最终都会被封装为 JSON 格式的 HTTP 请求,发送给本地的 WebDriver 服务。
驱动解析并转发指令浏览器驱动接收到 HTTP 请求后,会解析请求中的操作指令,转换为浏览器内核能够识别的调用指令,转发给浏览器执行。
浏览器执行并返回结果浏览器根据指令完成点击、输入、跳转等操作后,将执行结果沿原路返回,最终传递给 Selenium 脚本,完成一次完整的交互闭环。
四、Selenium 的典型适用场景
Selenium 的核心优势是模拟真实用户操作、覆盖前端 UI 交互,它的使用前提是前端页面进入稳定期,不再频繁变动。以下场景最能发挥它的价值:
1. 核心业务流程回归测试
项目进入稳定迭代期、核心功能固化后,将登录、下单、表单提交等高频主干流程封装为自动化用例,每次版本发布自动执行,替代人工重复验证,保障核心功能不出现回归缺陷。
2. 跨浏览器兼容性测试
当产品需要兼容 Chrome、Firefox、Safari、Edge 等多浏览器、多版本时,同一套用例可以在不同浏览器驱动上复用执行,快速校验页面渲染、交互逻辑的一致性,大幅降低人工全量兼容测试的成本。
3. 端到端(E2E)全链路验证
需要验证从前端交互到后端服务、数据存储的完整业务闭环时,模拟真实用户的完整操作路径(如注册→浏览→下单→支付→订单查询),覆盖前端逻辑 + 后端接口的全链路正确性,弥补接口测试无法覆盖的前端交互盲区。
4. 批量 Web 操作与测试数据构造
针对 Web 管理后台的大量标准化重复操作,比如批量创建测试账号、批量生成业务数据、批量处理工单等,用 Selenium 自动化执行可以大幅提升数据准备与重复操作的效率。
5. UI 常规巡检与基础专项校验
需要定期校验页面元素完整性、链接有效性、页面加载基础指标时,可结合断言、截图能力实现页面元素巡检、死链检测、首屏加载时长统计等日常自动化巡检。
五、不适用 Selenium 的场景
自动化测试并非万能,错误的选型会导致投入产出比严重失衡。以下场景不建议优先选用 Selenium:
- 接口测试与接口级回归:UI 层执行效率低、稳定性弱,接口测试优先选用 Postman、RestAssured 等接口自动化工具。
- 高并发性能压测:单浏览器实例资源消耗极高,无法支撑高并发场景,压测应选用 JMeter、Locust 等专业性能测试工具。
- 页面高频迭代的早期项目:UI 频繁变动会导致用例维护成本远高于自动化收益,更适合手工测试先行。
- 非 DOM 元素交互:Canvas 画布、视频播放器、系统原生弹窗等非 DOM 元素,Selenium 原生支持能力极弱,需要借助额外工具。
小结
Selenium 是 Web UI 自动化的基石工具,理解它的 C/S 通信原理、掌握基础 API 的使用,是深入 Web 自动化的第一步。与此同时,我们也需要清晰认识它的适用边界,在合适的场景引入自动化,才能真正提升测试效率。