首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 綜合教學

Selenium 2 入門實戰 (二):WebDriver 核心 API 與環境搭建全攻略

     編輯:Java 綜合教學

Selenium WebDriver 實戰入門:從環境搭建到百度搜索自動化

WebDriver (Selenium 2) 作為瀏覽器自動化測試的核心引擎,提供了簡潔、面向對象的 API,完全取代了 Selenium 1 的 JavaScript 注入模式,通過原生瀏覽器驅動直接控制瀏覽器,繞過 JS 沙箱限制,支援 Firefox、Chrome、IE、Edge、Safari 及移動端 (Appium/Selendroid),並可通過 Java、Python、C#、JS 等多語言調用。本文手把手教你搭建 Java + Maven + Eclipse/IDEA 環境,完成首個百度搜索自動化腳本。

一、開發環境準備清單

組件推薦版本獲取途徑
JDK11 / 17 LTSAdoptium / Oracle
IDEIntelliJ IDEA 2023+ / Eclipse官網
Maven3.9+官網
Selenium Java4.15+ (最新穩定版)Maven Central
瀏覽器驅動匹配瀏覽器主版本WebDriverManager 自動管理

現代最佳實踐:不再手動下載 JAR/驅動,直接在 pom.xml 引入 Selenium 依賴,並使用 WebDriverManager 自動下載匹配版本的驅動:

<dependencies>
    <dependency>
        <groupId>org.seleniumhq.selenium</groupId>
        <artifactId>selenium-java</artifactId>
        <version>4.15.0</version>
    </dependency>
    <dependency>
        <groupId>io.github.bonigarcia</groupId>
        <artifactId>webdrivermanager</artifactId>
        <version>5.6.2</version>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>org.junit.jupiter</groupId>
        <artifactId>junit-jupiter</artifactId>
        <version>5.10.2</version>
        <scope>test</scope>
    </dependency>
</dependencies>

二、首個自動化腳本:百度搜索「歐洲杯」

import org.junit.jupiter.api.*;
import org.openqa.selenium.*;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.support.ui.WebDriverWait;
import java.time.Duration;
import static org.junit.jupiter.api.Assertions.*;

class BaiduSearchTest {
    private WebDriver driver;
    private WebDriverWait wait;

    @BeforeEach
    void setUp() {
        // WebDriverManager 自動下載匹配 Chrome 版本的 chromedriver
        io.github.bonigarcia.wdm.WebDriverManager.chromedriver().setup();
        driver = new ChromeDriver();
        driver.manage().window().maximize();
        // 顯式等待:最長 10 秒,每 500ms 轮詢
        wait = new WebDriverWait(driver, Duration.ofSeconds(10));
    }

    @Test
    void searchEuroCup() {
        driver.get("https://www.baidu.com");
        // 定位搜索框並輸入
        WebElement searchBox = wait.until(d -> d.findElement(By.name("wd")));
        searchBox.sendKeys("歐洲杯");
        // 定位並點擊搜索按鈕
        WebElement searchBtn = wait.until(d -> d.findElement(By.id("su")));
        searchBtn.click();
        // 斷言:結果頁標題包含關鍵詞
        wait.until(d -> d.getTitle().contains("歐洲杯"));
        assertTrue(driver.getTitle().contains("歐洲杯"));
    }

    @AfterEach
    void tearDown() {
        if (driver != null) driver.quit();
    }
}

三、核心知識點深度解析

1. 等待策略:拒絕 Thread.sleep()

  • 隱式等待:driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(10)),全局生效,僅針對 findElement,靈活性差。
  • 顯式等待 (推薦):WebDriverWait + ExpectedConditions,針對特定條件 (可見、可點擊、文本出現等) 精準等待,支援自定義邏輯。
  • 流畅等待:FluentWait,可自定義輪詢間隔、忽略異常類型,最靈活。

2. 元素定位器優先級

id > name > cssSelector > xpath > linkText/partialLinkText > tagName/className。優先使用穩定唯一的 id/name,複雜結構用 CSS Selector,最後才用 XPath。

3. Page Object Model (POM) 設計模式

public class BaiduHomePage {
    private final WebDriver driver;
    private final By searchBox = By.name("wd");
    private final By searchBtn = By.id("su");

    public BaiduHomePage(WebDriver driver) { this.driver = driver; }

    public BaiduResultPage search(String keyword) {
        driver.findElement(searchBox).sendKeys(keyword);
        driver.findElement(searchBtn).click();
        return new BaiduResultPage(driver);
    }
}

將頁面元素與操作封裝,測試用例只調用業務方法,實現「測試代碼與頁面結構解耦」,便於維護。

四、常見坑點與解決方案

現象原因解決方案
driver 版本不匹配報錯瀏覽器自動更新導致主版本號變化使用 WebDriverManager 自動管理
元素找不到頁面未加載完成 / iframe / Shadow DOM / 動態渲染顯式等待 + 切換 iframe + JS 定位
點擊被攔截元素被遮擋 / 未滾動到可視區JS 滾動 ((JavascriptExecutor)driver).executeScript("arguments[0].scrollIntoView()", el) + 顯式等待可點擊
中文輸入亂碼編碼問題確保源文件 UTF-8,JVM 參數 -Dfile.encoding=UTF-8

五、進階擴展方向

  • 無頭模式:ChromeOptions args.add("--headless=new"),CI/CD 環境無界面運行。
  • 遠程執行:Selenium Grid / Selenoid / Docker 併發跨瀏覽器測試。
  • 截圖/錄屏:TakesScreenshot + Allure Report 生成可視化測試報告。
  • 移動端測試:Appium 復用 WebDriver API,Android/iOS 真機/模擬器自動化。
  • 性能指標收集:PerformanceTiming API 獲取頁面加載關鍵指標 (FP/FCP/LCP/TTI)。

總結

Selenium WebDriver 以「標準化 API + 原生驅動 + 多語言支援」成為 Web UI 自動化測試的事實標準。掌握 環境自動化管理、顯式等待策略、POM 設計模式、常見異常排查 四大核心技能,即可編寫穩定、可維護、可擴展的自動化測試套件。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved