跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客GitHub 精选镜像工具UI配色美学隐私政策关于联系
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
Javajava

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

Web 自动化测试通过脚本模拟浏览器操作,替代人工重复工作。核心在于理解自动化金字塔模型,合理分配底层单元接口与上层 UI 测试资源。本文以 Java+Selenium 为例,详解 WebDriver 驱动机制、环境搭建及百度搜索实战流程,强调脚本应聚焦具体落地任务而非单纯语法练习,帮助团队建立高效的质量保障体系。

CodeArtist发布于 2026/4/8更新于 2026/5/2210 浏览
Web 自动化测试入门:核心概念与百度搜索实战

自动化的核心概念

自动化本质是用程序替代人工操作,生活中随处可见,比如自动洒水机、超市闸机。其核心价值很明确:减少人力消耗,提升效率和质量。

在软件领域,自动化测试的核心目的主要是回归测试。当软件迭代新版本时,我们需要验证新增功能是否影响了历史功能的正常运行。这里有个常见的面试误区需要澄清:

  • 自动化不能完全取代人工。脚本需要人编写,功能变更后也要维护更新,可靠性未必优于人工。
  • 自动化不能'大幅度降低工作量'。它只能'一定程度'减少重复劳动,表述要严谨。

自动化测试的分类

自动化是个统称,主要包含接口和 UI 两大类。其中 UI 自动化又细分为移动端和 Web 端。

分类说明
接口自动化针对软件接口的测试,验证功能、性能、稳定性等
UI 自动化针对软件界面的测试

UI 自动化里,移动端受设备、系统版本影响大,稳定性相对较差;而 Web 自动化则是模拟浏览器操作,比如自动打开百度、执行搜索,替代人工完成网页操作与验证。

以'百度搜索'为例,Web 自动化的执行逻辑是:自动打开浏览器 → 访问百度首页 → 在搜索框输入内容 → 执行搜索 → 验证结果。这一流程替代了人工的重复操作,显著提升测试效率。

文章配图

自动化测试金字塔

理想的自动化测试架构呈金字塔形,底层稳固,顶层精简。

理想模型

从下到上依次为:单元测试 → API / 集成 / 组件测试 → UI 自动化测试 → 手动 / 探索性测试。

核心特点是投入产出比从下到上递减。底层的单元测试消耗时间精力少,却能发现更多问题,投资回报率更高;上层的 UI 自动化和手动测试则需更多资源,但回报相对较低。设计目的是倡导企业优先在底层投入,以更低成本保障质量。

现实模式

实际企业中常出现'冰淇淋蛋筒模式',结构与理想模型倒置。底层单元测试投入较少,上层 UI 和手动测试投入较多。

这背后的现实原因是:自动化需要大量初始投入(如脚本开发、框架搭建),企业往往优先选择'看得见效果'的上层测试。但长期来看,底层自动化的成本收益更优。

核心结论

自动化与手动并非互斥,而是互补:

  • 底层自动化(单元、接口)适合长期降本,保障基础质量;
  • 上层测试(UI、手动)适合覆盖复杂场景、探索性验证,提供短期保障。

文章配图

Web 自动化测试驱动机制

驱动的核心作用

驱动类似于汽车的发动机或电脑的设备驱动程序。程序要操作浏览器(如打开、输入、点击),必须通过 WebDriver(浏览器驱动) 建立程序与浏览器的通信。

计算机有了驱动程序就可以与设备进行通信。手动测试靠人眼和手,自动化程序则需 WebDriver 作为'桥梁',让代码能控制浏览器执行预设流程。

文章配图

驱动管理工具:WebDriverManager

手动下载和匹配驱动版本非常繁琐,WebDriverManager 是一个开源 Java 库,可自动管理 Selenium WebDriver 所需的浏览器驱动(如 ChromeDriver、GeckoDriver)。它能自动下载、配置驱动版本,还能识别本地浏览器版本并匹配对应驱动。

引入 Maven 依赖后,即可实现自动管理:

<dependency>
    <groupId>io.github.bonigarcia</groupId>
    <artifactId>webdrivermanager</artifactId>
    <version>5.6.2</version>
</dependency>

这降低了环境搭建成本,提升了脚本的可维护性。

Selenium 实战指南

Selenium 是主流的 Web 自动化测试工具,提供丰富的 API 模拟人工在浏览器中的操作,是编写 Web 自动化脚本的核心。

环境依赖

项目中需引入 Selenium 的 Java 库依赖:

<dependency>
    <groupId>org.seleniumhq.selenium</groupId>
    <artifactId>selenium-java</artifactId>
    <version>4.15.0</version>
</dependency>

脚本逻辑与配置

我们以'百度搜索'为例,实现'打开 Chrome 浏览器 → 访问百度 → 搜索关键词 → 关闭浏览器'的流程。

创建浏览器配置对象

ChromeOptions 的作用是给浏览器设置启动参数,就像开车前设定规则:'要不要无痕模式?要不要允许跨域?要不要最大化窗口?'

如果不配置,浏览器会以默认裸状态启动,可能触发跨域报错、窗口太小导致元素找不到等问题。代码如下:

ChromeOptions options = new ChromeOptions();
options.addArguments("--start-maximized");
options.addArguments("--disable-gpu");
实例化驱动对象

将配置传入 ChromeDriver,驱动启动时会带着规则打开浏览器。注意,driver 本质是驱动的实例,不是浏览器实例。你调用 driver.get(),就是告诉驱动去指定地址。

WebDriver driver = new ChromeDriver(options);
XPath 定位策略

定位元素时,推荐使用简写 XPath(相对 XPath),而非绝对路径。

维度简写 XPath(相对 XPath)Full XPath(绝对 XPath)
定位逻辑从整个页面找属性匹配的元素从 HTML 根节点按层级路径找元素
稳定性高(只要 id 不变,结构变了也能找到)极低(任意层级改了,路径就失效)
长度 / 可读性短、易读、易维护超长、难读、难维护
实际使用场景工作中首选(99% 的场景用这个)仅临时调试 / 无属性可定位的极端场景

工作原理

三者通过 HTTP 通信实现自动化:

  1. 启动服务:Selenium 脚本启动 ChromeDriverService,创建本地服务(IP: localhost,端口由服务分配);
  2. 连接驱动:脚本通过服务地址向 WebDriver 发送 HTTP 请求;
  3. 驱动解析:WebDriver 解析请求,打开浏览器并生成 sessionid;
  4. 执行操作:Selenium 的所有操作通过服务发送到 WebDriver,再由 WebDriver 转发给浏览器;
  5. 浏览器执行:浏览器解析请求并执行对应操作,将结果返回给 Selenium 脚本。

文章配图

脚本的核心是「做事儿」

很多人容易混淆'练手代码'和'自动化脚本'。

特征是脚本不是脚本
核心目的完成具体的、落地的任务(搜百度、批量改文件)学习语法、造工具(打印 hello、写链表)
执行方式一键运行就能自动干完所有事只输出结果或定义工具,没实际干活

为什么单行打印不算脚本?

System.out.println("hello") 只是验证能不能输出文字,没有解决任何落地问题。就算跑 100 次,也只是打印 100 次 hello,没干任何实际活。

数据结构算脚本吗?

只写数据结构的定义(比如链表节点、add/delete 方法)不算脚本,因为你只是造了个工具,没拿它干任何事。若你写'定义链表 + 加 10 个数据 + 遍历打印 + 输出到文件',这才是脚本,因为你完成了具体任务。

判断标准很简单: 跑代码后,如果它能自动完成一件你需要的具体事儿,就是脚本;如果只是练语法或出个无意义结果,就不是。

Selenium 通过'脚本→驱动→浏览器'的分层通信,实现了代码对浏览器的无人工干预控制。验证方式也很直观:执行脚本时,终端会显示创建的驱动服务地址,确认通信链路已打通。

目录

  1. 自动化的核心概念
  2. 自动化测试的分类
  3. 自动化测试金字塔
  4. 理想模型
  5. 现实模式
  6. 核心结论
  7. Web 自动化测试驱动机制
  8. 驱动的核心作用
  9. 驱动管理工具:WebDriverManager
  10. Selenium 实战指南
  11. 环境依赖
  12. 脚本逻辑与配置
  13. 创建浏览器配置对象
  14. 实例化驱动对象
  15. XPath 定位策略
  16. 工作原理
  17. 脚本的核心是「做事儿」
  18. 为什么单行打印不算脚本?
  19. 数据结构算脚本吗?
  • 💰 8折买阿里云服务器限时8折了解详情
  • Magick API 一键接入全球大模型注册送1000万token查看
  • 🤖 一键搭建Deepseek满血版了解详情
  • 一键打造专属AI 智能体了解详情
极客日志微信公众号二维码

微信扫一扫,关注极客日志

微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

更多推荐文章

查看全部
  • 解决 GitHub SSH 连接端口 22 超时问题
  • Jenkins Pipeline 自动化构建与部署 Java 项目
  • 深入理解 LRU 与 LFU 缓存算法实现
  • GitHub、谷歌学术与 Sci-Hub 镜像站使用指南及实测分析
  • 缓存算法实战:LRU 与 LFU 的 Java 实现与原理解析
  • 多语言 Prompt 实践:中文、英文、日文混写技巧
  • 无线蜂窝网络原理与演进:从 1G 到 6G
  • Python 列表基础与常用操作详解
  • 基于 Openclaw 与 Seed2.0 Skills 的 AI 漫剧生成方案
  • YOLO13-C3k2-WDBB 海下垃圾清理机器人环境感知与障碍物识别系统
  • 基于 AR 眼镜的喝水提醒应用开发实践
  • 专业人士如何利用大模型重塑工作流程
  • 基于YOLOv8/v11/v26与LLM的Web目标检测及人脸表情识别系统
  • 前端虚拟列表核心原理与 React 实战
  • Flutter 三方库 ethereum_addresses 在鸿蒙系统的适配与使用指南
  • FPGA 摄像头采集处理显示指南:OV5640 到 HDMI 实时显示
  • GPT、LLaMA 与 MOE:自回归模型与混合专家架构演进
  • Tesseract.js 纯 JavaScript OCR 技术指南
  • Pi0 机器人控制中心:实现智能操控
  • 鸿蒙 AI App 开发:架构逻辑的演变与思考

相关免费在线工具

  • 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