1. 开篇概述

1.1 Java 做 Web 自动化的优势

为什么选择 Java 来做 Web 自动化?

  • 生态成熟:Selenium 最早就是为 Java 开发的,资料最丰富,遇到问题容易找到解决方案
  • 稳定性强:Java 是强类型语言,代码更健壮,适合长期维护的自动化测试项目
  • 就业广泛:企业级自动化测试岗位 90% 以上要求 Java+Selenium 技术栈
  • 扩展性好:可以轻松集成 TestNG、Jenkins、Allure 等企业级工具链
  • 跨平台:一套代码可以在 Windows、Mac、Linux 上运行

1.2 适用场景

Web 自动化可以应用在以下场景:

场景

说明

功能测试

代替人工点击页面,验证网站功能是否正常

回归测试

版本更新后,自动运行所有用例,避免重复劳动

爬虫

对付反爬严格的网站,模拟真实浏览器行为采集数据

自动化运维

自动登录后台、批量操作、监控网站可用性

性能测试

结合其他工具进行前端性能监控

1.3 核心技术栈介绍

你需要掌握的核心技术:

技术

作用

Selenium

Web 自动化的核心框架,模拟人的操作

WebDriver

浏览器驱动,让代码能控制 Chrome、Firefox 等

Maven

项目管理工具,自动下载和管理依赖包

TestNG

测试框架,管理用例、生成报告、断言

WebDriverManager

自动管理浏览器驱动,告别手动下载


2. 环境搭建全流程(Win10 系统专用)

2.1 JDK 17 安装与验证

第一步:下载 JDK 17

下载地址https://www.oracle.com/java/technologies/downloads/#java17

选择 Windows → x64 Installer 下载

第二步:安装 JDK
  1. 双击下载的安装包(jdk-17_windows-x64_bin.exe)
  1. 点击 "下一步",记住安装路径(建议默认路径)
    • 默认路径:C:\\Program Files\\Java\\jdk\-17
  1. 等待安装完成,点击 "关闭"
第三步:配置环境变量(最重要!)
  1. 右键 "此电脑" → 属性 → 高级系统设置 → 环境变量
  1. "系统变量" 中点击 "新建"
    • 变量名:JAVA\_HOME
    • 变量值:C:\\Program Files\\Java\\jdk\-17(你的 JDK 安装路径)
  1. 找到 Path 变量,点击 "编辑"
    • 点击 "新建",添加:%JAVA\_HOME%\\bin
    • 点击 "新建",添加:%JAVA\_HOME%\\jre\\bin
  1. 一路点击 "确定" 保存
第四步:验证安装
  1. 按 Win+R,输入 cmd,打开命令提示符
  1. 输入以下命令验证
java -version
javac -version

成功标志:显示版本号,如 java version \&\#34;17\.0\.x\&\#34;


2.2 IDEA 社区版安装

第一步:下载 IDEA 社区版

下载地址https://www.jetbrains.com/idea/download/#section=windows

选择 Community(社区版)下载,完全免费!

第二步:安装 IDEA
  1. 双击安装包
  1. 点击 "下一步",选择安装路径(建议默认)
  1. 安装选项勾选
    • ✅ Create Desktop Shortcut(创建桌面快捷方式)
    • ✅ Update PATH variable(添加到环境变量)
    • ✅ .java(关联.java 文件)
  1. 点击 "安装",等待完成
第三步:首次启动配置
  1. 打开 IDEA,选择 "不导入设置"
  1. 选择主题(推荐 Darcula 黑色主题)
  1. 点击 "Skip Remaining and Set Defaults"

2.3 Maven 项目创建步骤

第一步:新建项目
  1. 打开 IDEA → New Project
  1. 左侧选择 "Maven"
  1. 勾选 "Create from archetype"
  1. **选择 ****org\.apache\.maven\.archetypes:maven\-archetype\-quickstart**
  1. 点击 "Next"
第二步:填写项目信息
  • Name:你的项目名(如:WebAutoDemo)
  • Location:项目存放位置
  • GroupId:公司域名倒写(如:com.example)
  • ArtifactId:项目名(如:WebAutoDemo)
  • Version:默认即可
  • 点击 "Next" → Finish
第三步:等待项目初始化

成功标志:看到项目结构,pom.xml 文件没有报错


2.4 Chrome 版本查看方法

  1. 打开 Chrome 浏览器
  1. 点击右上角三个点 → 帮助 → 关于 Google Chrome
  1. 查看版本号(如:124.0.6367.60)
  1. 记住大版本号(如:124)

2.5 ChromeDriver 手动配置方案(不推荐,了解即可)

第一步:下载对应版本 ChromeDriver

下载地址https://chromedriver.chromium.org/downloads

选择和你的 Chrome 大版本一致的驱动下载,举个例子:

https://storage.googleapis.com/chrome-for-testing-public/128.0.6613.137/win64/chromedriver-win64.zip

第二步:存放位置
  1. 解压得到 chromedriver.exe
  1. 放到项目根目录下(和 pom.xml 同级)
  1. 代码中指定路径
System.setProperty("webdriver.chrome.driver", "chromedriver.exe");

⚠️ 缺点:Chrome 自动更新后,驱动就失效了,需要重新下载


2.6 WebDriverManager 自动管理驱动(推荐方案 ✅)

这是目前最推荐的方案,自动下载匹配版本的驱动,一劳永逸!

只需要在 pom.xml 中引入依赖,代码中一行搞定,后面会详细讲。


3. 项目依赖配置

3.1 pom.xml 完整配置

打开 pom.xml,把下面的内容全部复制进去,覆盖原有内容

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.example</groupId>

    <artifactId>WebAutoDemo</artifactId>

    <version>1.0-SNAPSHOT</version>

    <properties>
        <maven.compiler.source>17</maven.compiler.source>

        <maven.compiler.target>17</maven.compiler.target>

        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>

    </properties>

    <dependencies>
        <!-- Selenium 核心依赖 -->
        <dependency>
            <groupId>org.seleniumhq.selenium</groupId>

            <artifactId>selenium-java</artifactId>

            <version>4.20.0</version>

            <!-- 排除冲突的Guava -->
            <exclusions>
                <exclusion>
                    <groupId>com.google.guava</groupId>

                    <artifactId>guava</artifactId>

                </exclusion>

            </exclusions>

        </dependency>

        <!-- WebDriverManager 自动管理驱动 -->
        <dependency>
            <groupId>io.github.bonigarcia</groupId>

            <artifactId>webdrivermanager</artifactId>

            <version>5.8.0</version>

        </dependency>

        <!-- TestNG 测试框架 -->
        <dependency>
            <groupId>org.testng</groupId>

            <artifactId>testng</artifactId>

            <version>7.9.0</version>

            <scope>test</scope>

        </dependency>

        <!-- 统一Guava版本,解决冲突 -->
        <dependency>
            <groupId>com.google.guava</groupId>

            <artifactId>guava</artifactId>

            <version>33.1.0-jre</version>

        </dependency>

    </dependencies>

</project>

3.2 刷新 Maven 依赖

  1. 点击 IDEA 右上角的 &#34;Maven&#34; 图标
  1. 点击刷新按钮(Reload All Maven Projects)
  1. 等待下载完成(第一次需要几分钟)

成功标志:pom.xml 没有红线,External Libraries 里能看到所有依赖


3.3 Guava 版本冲突的原因与解决方法

为什么会冲突?

Selenium 和 WebDriverManager 各自依赖了不同版本的 Guava,导致运行时报错:

java.lang.NoSuchMethodError: com.google.common.base...
彻底解决方法(上面的 pom.xml 已经配置好了)
  1. 在 selenium-java 中排除 Guava
  1. 单独引入统一版本的 Guava

就是上面 pom.xml 中做的事情,照抄即可!


4. 核心操作大全

4.1 8 种元素定位方法

前提:先创建浏览器驱动对象

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

public class LocatorDemo {
    public static void main(String[] args) {
        // 自动管理驱动(一行搞定!)
        WebDriverManager.chromedriver().setup();
        WebDriver driver = new ChromeDriver();
        driver.get("https://www.baidu.com");
1️⃣ id 定位(最推荐,最快)
// 通过id定位百度搜索框
WebElement searchBox = driver.findElement(By.id("kw"));
2️⃣ name 定位
// 通过name属性定位
WebElement searchBox = driver.findElement(By.name("wd"));
3️⃣ className 定位
// 通过class属性定位
WebElement searchBox = driver.findElement(By.className("s_ipt"));
4️⃣ tagName 定位(不常用)
// 通过标签名定位(返回多个,一般不用)
WebElement input = driver.findElement(By.tagName("input"));
5️⃣ linkText 定位(精准匹配链接文字)
// 精准匹配链接文字
WebElement link = driver.findElement(By.linkText("新闻"));
6️⃣ partialLinkText 定位(模糊匹配链接文字)
// 模糊匹配链接文字
WebElement link = driver.findElement(By.partialLinkText("新"));
7️⃣ cssSelector 定位(推荐,速度快)
// css选择器定位
WebElement searchBox = driver.findElement(By.cssSelector("#kw"));
WebElement button = driver.findElement(By.cssSelector(".s_btn"));
8️⃣ xpath 定位(万能,最强大)
// xpath定位(万能!)
WebElement searchBox = driver.findElement(By.xpath("//*[@id='kw']"));

4.2 常用操作大全

// 1. 输入文字
searchBox.sendKeys("Java自动化");

// 2. 点击按钮
WebElement button = driver.findElement(By.id("su"));
button.click();

// 3. 清空输入框
searchBox.clear();

// 4. 获取元素文本
String text = button.getText();
System.out.println("按钮文字:" + text);

// 5. 获取元素属性
String placeholder = searchBox.getAttribute("placeholder");
System.out.println("提示文字:" + placeholder);

// 6. 按回车键
searchBox.sendKeys(Keys.ENTER);

// 7. 显式等待(推荐,必须掌握!)
WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(10));
WebElement element = wait.until(
    ExpectedConditions.presenceOfElementLocated(By.id("kw"))
);

// 8. 判断元素是否显示
boolean isDisplayed = element.isDisplayed();

// 9. 判断元素是否启用
boolean isEnabled = element.isEnabled();

// 10. 判断是否选中(复选框、单选框)
boolean isSelected = checkbox.isSelected();

4.3 万能 XPath 写法速查

基础语法

表达式

说明

//\*

匹配所有元素

//div

匹配所有 div 标签

//\*\[@id=\&\#39;kw\&\#39;\]

匹配 id=kw 的元素

//\*\[@name=\&\#39;wd\&\#39;\]

匹配 name=wd 的元素

//\*\[@class=\&\#39;s\_ipt\&\#39;\]

匹配 class=s_ipt 的元素

模糊匹配
//*[contains(@id, 'kw')]           // id包含kw
//*[starts-with(@class, 's_')]     // class以s_开头
//*[text()='百度一下']              // 文本精确匹配
//*[contains(text(), '百度')]       // 文本包含百度
轴定位(父子、兄弟关系)
//div[@id='head']/child::*          // 所有子元素
//div[@id='head']/parent::*         // 父元素
//*[@id='kw']/following-sibling::*  // 后面的兄弟元素
//*[@id='kw']/preceding-sibling::*  // 前面的兄弟元素
组合定位(多条件)
//input[@id='kw' and @name='wd']    // 并且
//input[@type='text' or @type='password']  // 或者

5. 完整实战案例:百度搜索自动化

5.1 完整可运行代码

在 src/main/java 下创建 BaiduSearch.java,复制以下代码

package com.example;

import io.github.bonigarcia.wdm.WebDriverManager;
import org.openqa.selenium.By;
import org.openqa.selenium.Keys;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;

import java.time.Duration;

/**
 * 百度搜索自动化完整案例
 * 零基础可以直接复制运行
 */
public class BaiduSearch {
    public static void main(String[] args) {
        // ==============================================
        // 第1步:初始化驱动(WebDriverManager自动管理)
        // ==============================================
        System.out.println("=== 正在启动浏览器... ===");
        WebDriverManager.chromedriver().setup();  // 自动下载匹配版本的ChromeDriver
        WebDriver driver = new ChromeDriver();    // 创建Chrome浏览器对象
        driver.manage().window().maximize();      // 窗口最大化
        
        // ==============================================
        // 第2步:打开百度首页
        // ==============================================
        System.out.println("=== 正在打开百度首页... ===");
        driver.get("https://www.baidu.com");
        
        // ==============================================
        // 第3步:显式等待,确保搜索框加载完成
        // ==============================================
        System.out.println("=== 等待页面加载... ===");
        WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(10));
        WebElement searchBox = wait.until(
            ExpectedConditions.presenceOfElementLocated(By.id("kw"))
        );
        
        // ==============================================
        // 第4步:输入搜索关键词
        // ==============================================
        System.out.println("=== 输入搜索关键词... ===");
        searchBox.sendKeys("Java Web自动化入门");
        
        // ==============================================
        // 第5步:按回车键搜索
        // ==============================================
        System.out.println("=== 执行搜索... ===");
        searchBox.sendKeys(Keys.ENTER);
        
        // ==============================================
        // 第6步:等待搜索结果出现
        // ==============================================
        System.out.println("=== 等待搜索结果... ===");
        wait.until(
            ExpectedConditions.presenceOfElementLocated(By.id("content_left"))
        );
        
        // ==============================================
        // 第7步:获取第一条搜索结果的标题
        // ==============================================
        WebElement firstResult = driver.findElement(By.cssSelector("#content_left h3"));
        String title = firstResult.getText();
        System.out.println("=== 第一条搜索结果:" + title + " ===");
        
        // ==============================================
        // 第8步:等待3秒后关闭浏览器
        // ==============================================
        System.out.println("=== 搜索完成!3秒后关闭浏览器... ===");
        try {
            Thread.sleep(3000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        
        driver.quit();  // 关闭浏览器
        System.out.println("=== 程序执行完成! ===");
    }
}

5.2 代码逐行讲解

代码

说明

WebDriverManager\.chromedriver\(\)\.setup\(\)

最关键! 自动下载和 Chrome 版本匹配的驱动,再也不用手动下载了

WebDriver driver = new ChromeDriver\(\)

创建 Chrome 浏览器对象,此时会弹出一个 Chrome 窗口

driver\.manage\(\)\.window\(\)\.maximize\(\)

窗口最大化,避免元素被遮挡

driver\.get\(\&\#34;https://www\.baidu\.com\&\#34;\)

打开百度首页

WebDriverWait wait = new WebDriverWait\(driver, Duration\.ofSeconds\(10\)\)

创建等待对象,最多等 10 秒

wait\.until\(ExpectedConditions\.\.\.\)

显式等待,直到元素出现才继续,避免页面没加载完就操作

searchBox\.sendKeys\(\&\#34;Java Web自动化入门\&\#34;\)

在搜索框中输入文字

searchBox\.sendKeys\(Keys\.ENTER\)

按回车键

Thread\.sleep\(3000\)

强制等待 3 秒,方便看效果

driver\.quit\(\)

关闭浏览器

5.3 运行程序

  1. 右键 BaiduSearch.java → Run &#39;BaiduSearch.main ()&#39;
  1. 观察控制台输出
  1. 会自动弹出 Chrome 浏览器,自动完成搜索

成功标志

  • 浏览器自动打开百度
  • 自动输入关键词并搜索
  • 控制台打印第一条搜索结果
  • 3 秒后浏览器自动关闭

🎉 恭喜!你已经成功运行了第一个 Web 自动化程序!


6. 常见问题与排错指南

6.1 驱动版本不匹配

症状

SessionNotCreatedException: This version of ChromeDriver only supports Chrome version XX

原因:Chrome 自动更新了,旧驱动不支持

解决方案
使用 WebDriverManager! 就是我们代码中的 WebDriverManager\.chromedriver\(\)\.setup\(\),自动匹配版本,永远不会有这个问题!


6.2 元素找不到(NoSuchElementException)

症状

NoSuchElementException: no such element: Unable to locate element

原因和解决方案

原因

解决方法

页面还没加载完

必须用显式等待WebDriverWait,不要用 Thread.sleep

定位写错了

F12 打开开发者工具,Ctrl+F 测试 xpath/css 是否正确

在 iframe 里面

先切换 iframe:driver\.switchTo\(\)\.frame\(\&\#34;frameId\&\#34;\)

元素被遮挡

先最大化窗口,或者滚动到可见区域

动态 id

不要用 id,改用 xpath 的 contains 或其他属性

调试技巧:F12 → Elements → Ctrl+F → 输入你的 xpath,看能不能高亮元素


6.3 Guava 冲突报错(NoSuchMethodError)

症状

NoSuchMethodError: com.google.common.base.Preconditions.checkArgument...

原因:Selenium 和其他依赖的 Guava 版本不一致

解决方案:照抄我们 pom.xml 中的配置!

  1. selenium-java 中排除 guava
  1. 单独引入统一版本的 guava

6.4 路径错误、文件找不到

症状:文件找不到异常

解决方案

  1. chromedriver.exe 放在项目根目录(和 pom.xml 同级)
  1. 推荐直接用 WebDriverManager,不用管路径
  1. 绝对路径写法:\&\#34;C:\\\\driver\\\\chromedriver\.exe\&\#34;(注意双反斜杠)

7. 进阶学习路线

恭喜你入门了!接下来可以按这个路线进阶:

第一阶段:基础巩固

  • 元素等待机制深入:学习隐式等待、显式等待、FluentWait 的区别和使用场景
  • 三大切换:iframe 切换、窗口切换、alert 弹窗处理
  • 特殊元素操作:下拉框、日期选择器、文件上传、鼠标悬停

第二阶段:框架搭建

  • 📚 页面对象模式(POM):企业级自动化项目的标准架构,代码复用性强
  • 📚 TestNG 测试框架:注解、断言、用例管理、失败重跑、分组执行
  • 📚 数据驱动:从 Excel/CSV 读取测试数据,参数化测试

第三阶段:报告与运维

  • 📊 截图与日志:失败自动截图、log4j 日志记录
  • 📊 Allure 测试报告:生成漂亮的可视化测试报告
  • 📊 ExtentReports:另一个优秀的报告框架

第四阶段:企业级集成

  • 🔄 分布式测试:Selenium Grid,多浏览器并行执行
  • 🔄 CI/CD 集成:Jenkins 定时执行,邮件通知
  • 🔄 Docker 容器化:容器中运行自动化测试

🎓 写在最后

Web 自动化的学习路径:

  1. 先跑通第一个案例(你已经做到了!)
  1. 多写多练:找几个网站自己写脚本练习
  1. 遇到问题先搜索:99% 的问题都有人遇到过
  1. 打好基础:元素定位和等待是核心

记住:自动化不是万能的,但学会了能帮你节省 90% 的重复劳动!

更多推荐