<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>
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 4 已移除 Standalone Server 分發模式。現代最佳實踐:直接依賴 selenium-java + WebDriverManager,由後者自動下載匹配瀏覽器版本的 Driver (chromedriver, geckodriver, msedgedriver 等),無需手動下載、配置 PATH、升級維護。
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()
);
WebDriverWait + ExpectedConditions,勿濫用隱式等待。--disable-blink-features=AutomationControlled 或用 undetected-chromedriver (Python 生態)。@AfterEach 必須 driver.quit() (關閉瀏覽器進程),close() 僅關閉當前分頁。