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

Web 自动化测试入门:从概念到百度搜索实战

综述由AI生成Web 自动化测试利用工具模拟人工操作,核心在于回归测试与效率提升。文章解析了自动化金字塔模型,对比理想与企业实际投入差异,强调底层单元测试与接口测试的高性价比。重点介绍 Selenium 框架及 WebDriver 驱动机制,通过 Java 环境下的 Maven 依赖配置与 Chrome 浏览器控制示例,演示百度搜索场景的脚本编写流程。涵盖 XPath 定位策略选择,区分相对与绝对路径优劣,并澄清脚本与工具定义的本质区别,帮助开发者建立正确的自动化测试认知与实践路径。

月光旅人发布于 2026/3/28更新于 2026/6/1122 浏览
Web 自动化测试入门:从概念到百度搜索实战
一、自动化的核心概念
  1. 定义:通过自动方式替代人工操作完成任务。生活中常见的自动洒水机、超市闸机等案例,都体现了'减少人力消耗、提升效率与质量'的特点。
  2. 软件自动化测试的核心目的:
    • 用于回归测试:在软件迭代新版本时,验证新增功能是否影响历史功能的正常运行。
  3. 常见面试题解析:
    • 自动化测试不能完全取代人工测试:需人工编写脚本,且功能变更后需维护更新,可靠性未必优于人工。
    • 自动化测试不能'大幅度降低工作量':仅能'一定程度'减少重复工作,表述需严谨。

自动化概念示意图

二、自动化测试的分类

自动化是统称,包含多种类型,核心分类及说明如下:

分类说明
接口自动化针对软件接口的测试,目的是验证接口的功能、性能、稳定性等。
UI 自动化针对软件界面的测试,包含移动端和 Web 端。
  • 移动端自动化:通过模拟器在电脑上编写脚本,测试手机应用;稳定性较差(受设备、系统版本等环境因素影响)。
  • Web 自动化:模拟浏览器操作(如自动打开百度、执行搜索),替代人工完成网页操作与验证。

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

UI 自动化分类图

三、自动化测试金字塔

自动化金字塔模型

1. 理想的自动化测试金字塔
  1. 结构与逻辑:
    • 从下到上依次为:单元测试 → API/集成/组件测试 → UI 自动化测试 → 手动/探索性测试。
    • 核心特点:投入产出比从下到上递减。底层的单元测试消耗更少时间/精力,却能发现更多问题,投资回报率更高;上层的 UI 自动化、手动测试则需更多资源,但回报更低。
  2. 设计目的:倡导企业优先在底层(单元测试、接口测试)投入自动化,以更低成本保障软件质量。
2. 企业实际的'冰淇淋蛋筒模式'
  1. 结构与逻辑:与理想模型倒置。从下到上依次为:单元测试 → API/集成/组件测试 → UI 自动化测试 → 手动/探索性测试。
    • 核心特点:投入产出比从下到上递增。企业实际中常将更多资源投入上层(UI 自动化、手动测试),但这些环节的投资回报率更低;底层的单元测试投入较少。
  2. 现实原因:自动化需大量初始投入(如脚本开发、框架搭建),企业往往优先选择'看得见效果'的上层测试,但长期来看,底层自动化的成本收益更优。

企业实际模式图

3. 核心结论

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

  • 底层自动化(单元、接口)适合长期降本,保障基础质量;
  • 上层测试(UI、手动)适合覆盖复杂场景、探索性验证,提供短期保障。
四、Web 自动化测试原理
1. 驱动的核心作用
  1. 类比理解:驱动类似于'汽车的发动机'或'电脑的设备驱动程序'。程序要操作浏览器(如打开、输入、点击),需要通过**WebDriver(浏览器驱动)**建立程序与浏览器的通信,实现自动化操作。
  2. Web 自动化中的定位:手动测试需人工操作浏览器,而自动化程序需通过 WebDriver 作为'桥梁',让代码能控制浏览器执行预设流程。

计算机有了驱动程序就可以与设备进行通信(耳机、摄像头、麦克风、键盘、显示器等)。

驱动工作原理图

2. 驱动管理工具:WebDriverManager
  1. 功能:是一个开源 Java 库,可自动管理 Selenium WebDriver 所需的浏览器驱动(如 ChromeDriver、GeckoDriver 等),包括自动下载、配置驱动版本,还能识别本地浏览器版本并匹配对应驱动。
  2. 使用方式(Maven 依赖示例):通过在项目中引入如下依赖,即可自动管理驱动:
<dependency>
    <groupId>io.github.bonigarcia</groupId>
    <artifactId>webdrivermanager</artifactId>
    <version>5.6.2</version>
</dependency>

WebDriverManager 解决了'手动下载、匹配驱动版本'的繁琐问题,降低了 Web 自动化测试的环境搭建成本,提升了自动化脚本的可维护性。

五、Selenium 实战指南
1. Selenium 的定位

Selenium 是主流的 Web 自动化测试工具,提供丰富的 API(方法),用于模拟人工在浏览器中的操作(如打开页面、输入内容、点击按钮等),是编写 Web 自动化脚本的核心工具。

2. 简单的 Selenium 自动化示例
1. 环境依赖(Maven)

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

<dependency>
    <groupId>org.seleniumhq.selenium</groupId>
    <artifactId>selenium-java</artifactId>
    <version>4.10.0</version>
</dependency>
2. 自动化脚本逻辑(以'百度搜索'为例)

代码实现'打开 Chrome 浏览器→访问百度→搜索关键词→点击搜索→关闭浏览器'的流程,核心步骤:

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;
import io.github.bonigarcia.wdm.WebDriverManager;

public class BaiduSearchDemo {
    public static void main(String[] args) {
        // 初始化驱动管理器
        WebDriverManager.chromedriver().setup();
        
        // 创建浏览器配置对象(ChromeOptions)
        // 作用是给浏览器设置启动参数/规则,比如无痕模式、最大化窗口等
        ChromeOptions options = new ChromeOptions();
        options.addArguments("--start-maximized");
        
        // 实例化驱动对象并关联配置
        WebDriver driver = new ChromeDriver(options);
        
        try {
            // 访问百度首页
            driver.get("https://www.baidu.com");
            
            // 定位搜索框元素
            WebElement searchBox = driver.findElement(By.id("kw"));
            searchBox.sendKeys("Selenium 自动化测试");
            
            // 定位搜索按钮并点击
            driver.findElement(By.id("su")).click();
            
            // 等待结果加载(实际项目中建议使用显式等待)
            Thread.sleep(2000);
            
            // 打印当前 URL 验证跳转
            System.out.println("Current URL: " + driver.getCurrentUrl());
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            // 关闭浏览器
            driver.quit();
        }
    }
}

关于浏览器配置对象(ChromeOptions/EdgeOptions): 它的作用是'给浏览器设置启动参数/规则',就像你打开浏览器前先设置:'要不要无痕模式?要不要允许跨域?要不要最大化窗口?'

如果没有这个配置对象:浏览器会以'默认裸状态'启动,可能触发跨域报错、窗口太小导致元素找不到、弹窗拦截操作等问题,自动化容易失败。

实例化驱动对象(WebDriver)并关联配置: 这里的逻辑是:

  • ChromeDriver 是驱动的具体实现(对应 Chrome);
  • 传入 options 后,驱动启动浏览器时会'带着配置规则'打开浏览器;
  • driver 本质是'驱动的实例',不是'浏览器实例'—— 你操作 driver,就是驱动帮你控制浏览器。

把整个流程比作'你指挥司机开汽车':

  • 驱动(ChromeDriver)= 司机(懂怎么开 Chrome 这款'车');
  • 浏览器配置对象(ChromeOptions)= 你给司机的'开车规则'(比如'开之前先开窗、关空调、走高速');
  • driver = 你和司机的'沟通渠道';
  • 你调用 driver.get() = 你通过渠道告诉司机'去百度这个地址'。
维度简写 XPath(相对 XPath)Full XPath(绝对 XPath)
定位逻辑从整个页面找'id=chat-textarea'的任意元素从 HTML 根节点(/html)开始,按'层级路径'找元素
稳定性高(只要 id 不变,页面结构变了也能找到)极低(页面任意层级改了,路径就失效)
长度 / 可读性短、易读、易维护超长、难读、难维护
依赖页面结构不依赖(通过属性定位,和层级无关)完全依赖(层级错 1 个就定位失败)
实际使用场景工作中首选(99% 的场景用这个)仅临时调试/无属性可定位的极端场景
3. Selenium + 驱动 + 浏览器的工作原理

三者通过HTTP 通信实现自动化,流程为:

  1. 启动服务:Selenium 脚本启动 ChromeDriverService,创建本地服务(IP: localhost,端口由服务分配);
  2. 连接驱动:脚本通过服务地址向 WebDriver(浏览器驱动)发送 HTTP 请求;
  3. 驱动解析:WebDriver 解析请求,打开浏览器并生成 sessionid(后续操作需携带此 ID 标识会话);
  4. 执行操作:Selenium 的所有操作(访问地址、定位元素等)通过服务发送请求到 WebDriver,再由 WebDriver 转发给浏览器;
  5. 浏览器执行:浏览器解析请求并执行对应操作,将结果通过 WebDriver 返回给 Selenium 脚本。

Selenium 通信流程图

六、脚本的核心是「做事儿」,不是「造东西 / 练手」
特征是脚本不是脚本
核心目的完成具体的、落地的任务(比如搜百度、批量改文件、自动发消息)学习/验证语法、造工具/结构(比如练打印、写链表、算算法)
执行方式「一键运行」就能自动干完所有事,不用手动干预要么只输出一个结果,要么只是定义'工具'(比如定义个类/链表),没实际干活
举例子'开百度→输文字→关浏览器'代码单行 System.out.println("hello")、写个二叉树类、写冒泡排序
1. 为啥'单行打印 hello'不算脚本?
  • 目的:只是验证'能不能输出文字',没有完成任何「有价值的落地任务」(比如打印 hello 解决了啥问题?啥都没解决);
  • 执行:只输出一个字符串,没有'步骤链',也没有'自动化价值'——就算跑 100 次,也只是打印 100 次 hello,没干任何实际活。
2. 那'写个数据结构(比如链表/二叉树)'算脚本吗?
  • 只写「数据结构的定义」(比如定义链表节点、写 add/delete 方法)→ 不算脚本:你只是造了个'工具',但没拿这个工具干任何事(比如用链表存 100 个学生成绩、排序),本质是'练手写工具',不是'用工具做事';
  • 若你写:「定义链表 + 往链表加 10 个数据 + 遍历打印所有数据 + 输出到文件」→ 算脚本:因为你用数据结构完成了「存数据→打印→存文件」的具体任务,是'按步骤自动干活'。
代码内容算不算脚本?核心判断
写个 for 循环,打印 1 到 100算「极简脚本」完成了'输出 1-100'的具体小任务
写个计算器函数(加/减),但只定义不调用不算只造工具,没实际算任何数
写计算器函数 + 输入 2 个数 + 调用加法 + 打印结果算脚本完成了'计算 2 数之和'的具体任务

跑代码后,如果它能「自动完成一件你需要的具体事儿」,就是脚本;如果只是'练语法/造工具/出个无意义结果',就不是。

核心价值

Selenium 通过'脚本→驱动→浏览器'的分层通信,实现了代码对浏览器的无人工干预控制,是 Web 自动化测试的核心执行工具。

验证方式:执行 selenium 编写的自动化脚本代码中,可以在终端看到创建的驱动服务地址。

目录

  1. 一、自动化的核心概念
  2. 二、自动化测试的分类
  3. 三、自动化测试金字塔
  4. 1. 理想的自动化测试金字塔
  5. 2. 企业实际的“冰淇淋蛋筒模式”
  6. 3. 核心结论
  7. 四、Web 自动化测试原理
  8. 1. 驱动的核心作用
  9. 2. 驱动管理工具:WebDriverManager
  10. 五、Selenium 实战指南
  11. 1. Selenium 的定位
  12. 2. 简单的 Selenium 自动化示例
  13. 1. 环境依赖(Maven)
  14. 2. 自动化脚本逻辑(以“百度搜索”为例)
  15. 3. Selenium + 驱动 + 浏览器的工作原理
  16. 六、脚本的核心是「做事儿」,不是「造东西 / 练手」
  17. 1. 为啥“单行打印 hello”不算脚本?
  18. 2. 那“写个数据结构(比如链表/二叉树)”算脚本吗?
  19. 核心价值
  • 💰 8折买阿里云服务器限时8折了解详情
  • Magick API 一键接入全球大模型注册送1000万token查看
  • 🤖 一键搭建Deepseek满血版了解详情
  • 一键打造专属AI 智能体了解详情
极客日志微信公众号二维码

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

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

更多推荐文章

查看全部
  • DeepSeek 系列模型版本演进与核心特性对比
  • 基于 SpringBoot2+Vue3 的疫情健康打卡评测系统设计
  • Java 音视频场景面试实战:内存模型、Spring Boot 与 Kafka
  • 基于 Spring Boot 的药房管理系统设计与实现
  • 基于 STM32 的智能宠物喂食系统设计与实现
  • 数据结构基础:直接插入、希尔与选择排序详解
  • 网络安全基础知识与防护指南
  • C 语言 Web 开发:CGI、FastCGI 与 Nginx 实战解析
  • 单链表核心操作全实现:查找、插入与删除的深度解析
  • 链表分类详解与带头双向循环链表初始化实现
  • 数据结构:顺序表概念与实现
  • OpenCode 开源 AI 编程助手使用指南
  • 后端语言性能排行:哪种语言最快及其原因分析
  • 2026 年主流 AI 大模型实测排名与选型指南
  • Windows 环境下 OpenClaw 环境搭建与飞书接入实战
  • AI 时代技术民主化:文科生为何成最大受益者
  • 腾讯云 LKE 接入 DeepSeek 模型实战指南
  • QT(C++) 权限管理平台源码:功能与实现
  • 数据结构基础:单向链表实现与原理
  • 转行网络安全两年:行业现状分析与学习路径建议

相关免费在线工具

  • 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