public void browserControl(WebDriver driver) throws InterruptedException {
driver.get("https://www.example.com");
Thread.sleep(2000);
// 視窗最大化
driver.manage().window().maximize();
// 導航操作
driver.navigate().to("https://www.google.com");
driver.navigate().refresh(); // 重新整理
driver.navigate().back(); // 返回
driver.navigate().forward(); // 前進
// 關閉瀏覽器 (釋放所有資源)
driver.quit();
}
public void takeScreenshot(WebDriver driver) throws IOException {
driver.get("https://www.google.com");
// 強制轉型為 TakesScreenshot 介面
File srcFile = ((TakesScreenshot) driver).getScreenshotAs(OutputType.FILE);
// 複製到目標路徑
File destFile = new File("screenshots/google_" + System.currentTimeMillis() + ".png");
FileUtils.copyFile(srcFile, destFile); // 需 commons-io 依賴
}
public void rightClick(WebDriver driver) {
driver.get("https://www.google.com");
Actions actions = new Actions(driver);
WebElement searchBox = driver.findElement(By.name("q"));
// 右鍵點擊搜尋框
actions.contextClick(searchBox).perform();
// 其他常用滑鼠操作
// actions.doubleClick(element).perform(); // 雙擊
// actions.clickAndHold(element).perform(); // 按住不放
// actions.moveToElement(element).perform(); // 滑鼠移至元素
// actions.dragAndDrop(source, target).perform(); // 拖曳
}
public void killBrowserProcesses() {
// 透過作業系統指令終止殘留進程
// Windows
Runtime.getRuntime().exec("taskkill /F /IM chromedriver.exe");
Runtime.getRuntime().exec("taskkill /F /IM chrome.exe");
Runtime.getRuntime().exec("taskkill /F /IM geckodriver.exe");
Runtime.getRuntime().exec("taskkill /F /IM firefox.exe");
// Linux/Mac
// Runtime.getRuntime().exec("pkill -9 chromedriver");
// Runtime.getRuntime().exec("pkill -9 chrome");
}
現代專案建議使用 WebDriverManager 配合 `try-with-resources` 或 JUnit `@AfterEach` 確保資源釋放:
@AfterEach
void tearDown(WebDriver driver) {
if (driver != null) {
driver.quit(); // 正常關閉,包含驅動程式進程
}
}
| 操作 | 推薦方法 | 注意事項 |
|---|---|---|
| 視窗最大化 | `driver.manage().window().maximize()` | 測試開始前執行,避免元素不可見 |
| 截圖 | `TakesScreenshot` + `FileUtils.copyFile` | 失敗時自動截圖整合至測試報告 |
| 滑鼠/鍵盤模擬 | `Actions` 類別 | 複雜操作鏈用 `build().perform()` |
| 關閉瀏覽器 | `driver.quit()` | **絕不使用 `close()`** (僅關閉當前分頁) |
| 殘留進程清理 | CI/CD 階段執行 `pkill/taskkill` | 最後防線,正常情況 `quit()` 即可 |