跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客我的书AI学习GitHub 精选镜像AI 生图工具UI配色美学关于
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
Java大前端java

Web 自动化测试入门:核心概念与百度搜索实战

Web 自动化测试通过脚本替代人工操作,核心目的是回归测试与提升效率。自动化金字塔模型建议优先投入底层单元与接口测试以获得更高 ROI,尽管现实中常出现倒置。Selenium 配合 WebDriver 及 WebDriverManager 可实现浏览器自动化控制,关键在于驱动管理与元素定位策略。区分脚本与工具的定义,强调脚本需完成具体落地任务而非单纯语法练习,确保自动化真正服务于业务验证。

数字游民发布于 2026/3/25更新于 2026/9/1049 浏览
Web 自动化测试入门:核心概念与百度搜索实战

Web 自动化测试入门:核心概念与实战

一、自动化的核心概念

简单来说,自动化就是用机器替代人工。生活中像自动洒水机、超市闸机都是这个逻辑,核心目的很明确:减少人力消耗,提升效率和质量。

在软件领域,自动化测试的核心价值在于回归测试。当软件迭代新版本时,我们需要验证新增功能有没有把旧功能搞坏。这时候,自动化脚本就能派上用场了。

这里有个常见的误区需要澄清:

  • 不能完全取代人工:脚本是人写的,业务变了脚本也得改,可靠性未必比人高。
  • 不能大幅降低工作量:它只能减少重复劳动,前期投入其实不小。

![相关示意图]

二、自动化测试的分类

自动化是个统称,主要分两类:

分类说明
接口自动化针对后端接口,验证功能、性能、稳定性等。
UI 自动化针对用户界面,包含移动端和 Web 端。

其中 Web 自动化 最常用,比如模拟浏览器打开百度、输入搜索词、点击按钮。它的执行逻辑很直观:启动浏览器 → 访问页面 → 操作元素 → 验证结果。

![相关示意图]

三、自动化测试金字塔

理想的自动化结构应该像金字塔:底层是单元测试,中间是接口/集成测试,顶层才是 UI 自动化。

1. 理想模型

  • 结构:单元测试 → API/集成测试 → UI 自动化 → 手动测试。
  • 逻辑:越底层的测试,开发和维护成本越低,发现 Bug 越早,投资回报率(ROI)越高。UI 层虽然直观但脆弱且维护贵。

2. 现实模式(冰淇淋蛋筒)

很多公司实际做法是倒过来的,大量资源砸在 UI 层,底层反而薄弱。这通常是因为 UI 自动化效果'看得见',容易出汇报成果,但从长远质量保障来看,底层自动化才是降本增效的关键。

![相关示意图]

3. 结论

两者不互斥,而是互补。底层保基础质量,上层覆盖复杂场景。

四、Web 自动化核心组件

1. WebDriver 的作用

WebDriver 就像是汽车的发动机或电脑的驱动程序。程序本身无法直接控制浏览器,必须通过 WebDriver 建立通信桥梁。

手动测试是你手摸键盘鼠标,自动化则是代码通过 WebDriver 指挥浏览器干活。

![相关示意图]

2. 驱动管理工具:WebDriverManager

手动下载匹配不同版本的 ChromeDriver 很麻烦,WebDriverManager 这个开源库能自动处理。它能识别本地浏览器版本,自动下载对应驱动,省去了环境配置的坑。

Maven 依赖引入后,基本就不用管驱动版本了。

![相关示意图]

五、Selenium 实战示例

Selenium 是目前主流的 Web 自动化框架,提供丰富的 API 来模拟浏览器操作。下面以 Java 为例,演示如何写一个'百度搜索'的脚本。

1. 环境准备

项目中引入 Selenium 和 WebDriverManager 的 Maven 依赖即可。

2. 脚本逻辑实现

这段代码实现了:打开 Chrome → 访问百度 → 搜索关键词 → 关闭浏览器。

 org.openqa.selenium.By;
 org.openqa.selenium.WebDriver;
 org.openqa.selenium.WebElement;
 org.openqa.selenium.chrome.ChromeDriver;
 org.openqa.selenium.chrome.ChromeOptions;

   {
        {
        
        
            ();
        options.addArguments();
        

        
        
            (options);

         {
            
            driver.get();

            
            
               driver.findElement(By.id());
            searchBox.sendKeys();

               driver.findElement(By.id());
            searchBtn.click();

            
            System.out.println( + driver.getTitle());

        }  (Exception e) {
            e.printStackTrace();
        }  {
            
             (driver != ) {
                driver.quit();
            }
        }
    }
}
import
import
import
import
import
public
class
BaiduSearchTest
public
static
void
main
(String[] args)
// 1. 配置浏览器选项
// 设置无头模式、最大化窗口等参数,避免默认裸启动导致的兼容性问题
ChromeOptions
options
=
new
ChromeOptions
"--start-maximized"
// options.addArguments("--headless"); // 如需后台运行可开启
// 2. 初始化驱动对象
// WebDriver 本质是沟通渠道,driver 实例指挥 ChromeDriver 去控制浏览器
WebDriver
driver
=
new
ChromeDriver
try
// 3. 访问页面
"https://www.baidu.com"
// 4. 定位并操作元素
// 推荐使用相对 XPath 或 ID 定位,稳定性更高
WebElement
searchBox
=
"kw"
"Selenium 自动化测试"
WebElement
searchBtn
=
"su"
// 5. 简单验证(此处省略断言逻辑)
"搜索完成,标题:"
catch
finally
// 6. 清理资源
if
null

3. 原理简析

三者通过 HTTP 通信协作:

  1. 启动服务:脚本启动 ChromeDriverService,监听本地端口。
  2. 连接驱动:Selenium 发送 HTTP 请求给驱动。
  3. 会话创建:驱动解析请求,打开浏览器并生成 sessionId。
  4. 指令执行:后续所有操作(如 get, findElement)都通过该会话转发给浏览器。

![相关示意图]

六、什么是真正的'脚本'?

做自动化,核心是**'做事',而不是'造东西'**。

特征是脚本不是脚本
核心目的完成具体落地任务(如搜百度、批量改文件)学习语法、定义数据结构、造工具
执行方式一键运行自动干完所有事只输出结果或仅定义类/方法
例子'开百度→输文字→关浏览器'单行打印 hello、写个链表类但不使用

判断标准:跑完代码后,如果它自动帮你完成了一件有价值的具体事儿,就是脚本;如果只是练手或定义了工具却没调用,那就不算。

比如,只写个计算器函数不算脚本,但写了函数又输入数据计算并保存结果,就算脚本。Selenium 的价值就在于通过分层通信,让代码能无人工干预地控制浏览器,这才是自动化测试的精髓。

目录

  1. Web 自动化测试入门:核心概念与实战
  2. 一、自动化的核心概念
  3. 二、自动化测试的分类
  4. 三、自动化测试金字塔
  5. 1. 理想模型
  6. 2. 现实模式(冰淇淋蛋筒)
  7. 3. 结论
  8. 四、Web 自动化核心组件
  9. 1. WebDriver 的作用
  10. 2. 驱动管理工具:WebDriverManager
  11. 五、Selenium 实战示例
  12. 1. 环境准备
  13. 2. 脚本逻辑实现
  14. 3. 原理简析
  15. 六、什么是真正的“脚本”?

更多推荐文章

查看全部
  • Flutter 组件 tavily_dart 在鸿蒙系统的适配与进阶应用
  • 基于 Vue 3 和 Hiprint 的 Web 打印设计器 vg-print:拖拽设计与静默打印
  • 基于 Web 的上机管理系统设计与开发
  • Spring Boot Starter 自定义开发实战:构建企业级组件库
  • LLM 微调实战指南:Pythia 模型 Fine Tuning 全流程解析
  • 数据结构初阶:二叉树的链式存储与实现
  • llama.cpp 性能调优指南:提升本地部署效率
  • RabbitMQ 核心工作模式详解与 Java 实战
  • Spring Boot 事件机制详解:原理与示例
  • Prism 工具简介、安装使用及案例应用详解
  • 前端地图开发基础:服务类型、坐标系与 SDK 简介
  • ThinkPHP 和 Laravel 框架的基于 Web 的在线考试答题游戏设计与实现
  • 前端函数防抖详解:原理、手写与 Lodash 实战
  • DeepSeek-R1 大模型基于 MS-Swift 框架部署推理微调指南
  • Llama.cpp 跨平台部署本地大模型实战指南
  • C语言标准库与工具链:string.h、stdio.h、stdlib.h及CMake构建
  • Fooocus 部署实践:本地手动配置与云端一键启用对比
  • 如何成为卓越的 AIGC 产品经理:从传统产品到 AI 领域的转型指南
  • Python 基础语法详解
  • ComfyUI 整合包安装与使用指南

相关免费在线工具

  • Keycode 信息

    查找任何按下的键的javascript键代码、代码、位置和修饰符。 在线工具,Keycode 信息在线工具,online

  • Escape 与 Native 编解码

    JavaScript 字符串转义/反转义;Java 风格 \uXXXX(Native2Ascii)编码与解码。 在线工具,Escape 与 Native 编解码在线工具,online

  • JavaScript / HTML 格式化

    使用 Prettier 在浏览器内格式化 JavaScript 或 HTML 片段。 在线工具,JavaScript / HTML 格式化在线工具,online

  • JavaScript 压缩与混淆

    Terser 压缩、变量名混淆,或 javascript-obfuscator 高强度混淆(体积会增大)。 在线工具,JavaScript 压缩与混淆在线工具,online

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online