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

Selenium 處理 JavaScript 警告框、確認框與提示框完整指南

     編輯:Java 相關知識

三種原生對話框類型

類型JavaScript 方法用途按鈕
警告框`alert("訊息")單純通知確定
確認框`confirm("訊息")用戶決策確定/取消
提示框`prompt("訊息", "預設值")用戶輸入確定/取消

測試頁面

線上測試頁:https://sislands.com/coin70/week1/dialogbox.htm (包含三種對話框按鈕)

核心 API:Alert 介面

Alert alert = driver.switchTo().alert();  // 切換到對話框上下文

alert.getText();        // 取得提示文字
alert.accept();         // 點擊「確定」
alert.dismiss();        // 點擊「取消」 (確認框/提示框)
alert.sendKeys("文字"); // 輸入文字 (僅提示框)

完整操作範例

1. 處理警告框

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();
}

2. 處理提示框

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();
}

3. 處理確認框

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();
}

關鍵注意事項

  1. 必須 `switchTo().alert()`:WebDriver 預設在主頁面上下文,對話框是獨立上下文
  2. 對話框阻塞:出現時主頁面無法操作,必須先處理對話框
  3. 連續對話框:某些頁面連續彈出,每次都需重新 `switchTo().alert()` 獲取最新實例
  4. 隱性等待無效:對話框操作建議使用 `Thread.sleep` 或 `FluentWait` 搭配 `ExpectedConditions.alertIsPresent()`

現代化寫法:顯性等待

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 對話框自動化測試場景。

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