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

Java Selenium 環境搭建全攻略:Maven/Gradle 依賴、Driver 管理與首個測試腳本

     編輯:Java 相關知識

專案依賴配置

Maven (pom.xml)

<dependencies>
    <!-- Selenium 核心 -->
    <dependency>
        <groupId>org.seleniumhq.selenium</groupId>
        <artifactId>selenium-java</artifactId>
        <version>4.15.0</version>
    </dependency>
    <!-- JUnit 5 測試框架 -->
    <dependency>
        <groupId>org.junit.jupiter</groupId>
        <artifactId>junit-jupiter</artifactId>
        <version>5.10.1</version>
        <scope>test</scope>
    </dependency>
    <!-- WebDriverManager 自動管理驅動程式 (強烈推薦) -->
    <dependency>
        <groupId>io.github.bonigarcia</groupId>
        <artifactId>webdrivermanager</artifactId>
        <version>5.6.2</version>
        <scope>test</scope>
    </dependency>
</dependencies>

Gradle (build.gradle.kts)

dependencies {
    testImplementation("org.seleniumhq.selenium:selenium-java:4.15.0")
    testImplementation("org.junit.jupiter:junit-jupiter:5.10.1")
    testImplementation("io.github.bonigarcia:webdrivermanager:5.6.2")
}

為什麼不用 selenium-server-standalone.jar?

Selenium 4 已移除 Standalone Server 分發模式。現代最佳實踐:直接依賴 selenium-java + WebDriverManager,由後者自動下載匹配瀏覽器版本的 Driver (chromedriver, geckodriver, msedgedriver 等),無需手動下載、配置 PATH、升級維護。

首個測試腳本 (JUnit 5)

import org.junit.jupiter.api.*;
import org.openqa.selenium.*;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;
import io.github.bonigarcia.wdm.WebDriverManager;

public class FirstSeleniumTest {

    private WebDriver driver;

    @BeforeEach
    void setup() {
        // 自動解析 Chrome 版本並下載對應 chromedriver
        WebDriverManager.chromedriver().setup();
        
        ChromeOptions options = new ChromeOptions();
        // options.addArguments("--headless=new"); // CI 環境可開啟無頭模式
        options.addArguments("--start-maximized");
        
        driver = new ChromeDriver(options);
        driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(10));
    }

    @Test
    void searchOnGoogle() {
        driver.get("https://www.google.com");
        WebElement searchBox = driver.findElement(By.name("q"));
        searchBox.sendKeys("Selenium WebDriver");
        searchBox.submit();
        
        Assertions.assertTrue(driver.getTitle().contains("Selenium"));
    }

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

常見瀏覽器啟動選項

需求選項代碼
無頭模式 (CI/CD)options.addArguments("--headless=new")
禁用 GPU (容器環境)options.addArguments("--disable-gpu")
禁用沙箱 (Docker root)options.addArguments("--no-sandbox")
設定下載目錄options.setExperimentalOption("prefs", Map.of("download.default_directory", "/tmp"))
忽略證書錯誤options.setAcceptInsecureCerts(true)

進階:遠端執行

// 連接 Selenium Grid / Selenoid / BrowserStack
RemoteWebDriver driver = new RemoteWebDriver(
    new URI("https://localhost:4444/wd/hub").toURL(),
    new ChromeOptions()
);

避坑指南

  • 版本不匹配:Chrome 更新後舊 chromedriver 失效 → 必用 WebDriverManager。
  • 元素定位失敗:頁面未載入完成 → 顯式等待 WebDriverWait + ExpectedConditions,勿濫用隱式等待。
  • 無頭模式偵測:部分網站封鎖 Headless → 添加 --disable-blink-features=AutomationControlled 或用 undetected-chromedriver (Python 生態)。
  • 資源洩漏:@AfterEach 必須 driver.quit() (關閉瀏覽器進程),close() 僅關閉當前分頁。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved