| 類型 | JavaScript 方法 | 用途 | 按鈕 |
|---|---|---|---|
| 警告框 | `alert("訊息") | 單純通知 | 確定 |
| 確認框 | `confirm("訊息") | 用戶決策 | 確定/取消 |
| 提示框 | `prompt("訊息", "預設值") | 用戶輸入 | 確定/取消 |
線上測試頁:https://sislands.com/coin70/week1/dialogbox.htm (包含三種對話框按鈕)
Alert alert = driver.switchTo().alert(); // 切換到對話框上下文
alert.getText(); // 取得提示文字
alert.accept(); // 點擊「確定」
alert.dismiss(); // 點擊「取消」 (確認框/提示框)
alert.sendKeys("文字"); // 輸入文字 (僅提示框)
public void handleAlert(WebDriver driver) {
driver.get("https://sislands.com/coin70/week1/dialogbox.htm");
// 觸發警告框
driver.findElement(By.xpath("//input[@value='alert']")).click();
// 切換到 Alert
Alert alert = driver.switchTo().alert();
System.out.println("警告內容: " + alert.getText());
// 接受 (點擊確定)
alert.accept();
}
public void handlePrompt(WebDriver driver) throws InterruptedException {
driver.get("https://sislands.com/coin70/week1/dialogbox.htm");
// 觸發提示框
driver.findElement(By.xpath("//input[@value='prompt']")).click();
Thread.sleep(1000); // 等待對話框彈出
Alert prompt = driver.switchTo().alert();
// 輸入文字
prompt.sendKeys("Selenium 學習測試");
// 接受
prompt.accept();
Thread.sleep(1000);
// 再次觸發並取消
driver.findElement(By.xpath("//input[@value='prompt']")).click();
Thread.sleep(1000);
prompt = driver.switchTo().alert();
prompt.dismiss(); // 點擊取消
Thread.sleep(1000);
// 取消後可能再彈出確認框,需再次處理
prompt = driver.switchTo().alert();
prompt.accept();
}
public void handleConfirm(WebDriver driver) throws InterruptedException {
driver.get("https://sislands.com/coin70/week1/dialogbox.htm");
driver.findElement(By.xpath("//input[@value='confirm']")).click();
Thread.sleep(1000);
Alert confirm = driver.switchTo().alert();
confirm.accept(); // 點擊確定
Thread.sleep(1000);
// 可能連續彈出,需再次切換處理
confirm = driver.switchTo().alert();
confirm.accept();
}
WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(10)); // 等待警告框出現並切換 Alert alert = wait.until(ExpectedConditions.alertIsPresent()); alert.getText(); alert.accept();
掌握 `Alert` 介面四大核心方法 (`getText`、`accept`、`dismiss`、`sendKeys`),搭配 `switchTo().alert()` 上下文切換,即可應付所有原生 JavaScript 對話框自動化測試場景。