web-dev-qa-db-ja.com

Javaを使用したSelenium WebDriver(Selenium 2)のアラート処理

アラートがポップアップされたかどうかを検出したい。現在、私は次のコードを使用しています:

    try {
        Alert alert = webDriver.switchTo().alert();

        // check if alert exists
        // TODO find better way
        alert.getText();

        // alert handling
        log().info("Alert detected: {}" + alert.getText());
        alert.accept();
    } catch (Exception e) {
    }

問題は、Webページの現在の状態にアラートがない場合、タイムアウトに達するまで特定の時間待機し、例外をスローするため、パフォーマンスが非常に悪いことです。

より良い方法はありますか、おそらくアラートを動的に発生させるために使用できるアラートイベントハンドラーですか?

38
Alp

これは、ここから明示的な待機を使用して私のために働いたものです WebDriver:Advanced Usage

public void checkAlert() {
    try {
        WebDriverWait wait = new WebDriverWait(driver, 2);
        wait.until(ExpectedConditions.alertIsPresent());
        Alert alert = driver.switchTo().alert();
        alert.accept();
    } catch (Exception e) {
        //exception handling
    }
}
76
Leo

次のメソッドを記述します。

public boolean isAlertPresent() {
    try {
        driver.switchTo().alert();
        return true;
    } // try
    catch (Exception e) {
        return false;
    } // catch
}

これで、上記のメソッドを使用して、アラートが存在するかどうかを確認できます。

if (isAlertPresent()) {
    driver.switchTo().alert();
    driver.switchTo().alert().accept();
    driver.switchTo().defaultContent();
}
16
Ripon Al Wasim
アラートアラート= driver.switchTo()。alert(); 
 
 alert.accept(); 

警告ボックスを拒否することもできます。

 
アラートアラート= driver.switchTo()。alert(); 
 
 alert()。dismiss(); 
3
ER.swatantra
try 
    {
        //Handle the alert pop-up using seithTO alert statement
        Alert alert = driver.switchTo().alert();

        //Print alert is present
        System.out.println("Alert is present");

        //get the message which is present on pop-up
        String message = alert.getText();

        //print the pop-up message
        System.out.println(message);

        alert.sendKeys("");
        //Click on OK button on pop-up
        alert.accept();
    } 
    catch (NoAlertPresentException e) 
    {
        //if alert is not present print message
        System.out.println("alert is not present");
    }
2
user4562460

試すことができます

 try{
        if(webDriver.switchTo().alert() != null){
           Alert alert = webDriver.switchTo().alert();
           alert.getText();
           //etc.
        }
    }catch(Exception e){}

それでもうまくいかない場合は、すべてのウィンドウハンドルをループして、アラートが存在するかどうかを確認してください。 Seleniumを使用してアラートが新しいウィンドウとして開くかどうかはわかりません。

for(String s: webDriver.getWindowHandles()){
 //see if alert exists here.
}
0
Reid Mac