85

WebDriver で Alert の存在を確認する必要があります。

アラートがポップアップする場合もありますが、ポップアップしない場合もあります。最初にアラートが存在するかどうかを確認する必要があります。次に、アラートを受け入れるか無視するか、「アラートが見つかりません」と表示されます。

4

9 に答える 9

90
public boolean isAlertPresent() 
{ 
    try 
    { 
        driver.switchTo().alert(); 
        return true; 
    }   // try 
    catch (NoAlertPresentException Ex) 
    { 
        return false; 
    }   // catch 
}   // isAlertPresent()

ここのリンクを確認してください https://groups.google.com/forum/?fromgroups#!topic/webdriver/1GaSXFK76zY

于 2012-07-13T09:22:47.383 に答える
30

次の (C# の実装ですが、Java での実装と似ています) を使用すると、WebDriverWaitオブジェクトを作成せずに、例外なしでアラートがあるかどうかを判断できます。

boolean isDialogPresent(WebDriver driver) {
    IAlert alert = ExpectedConditions.AlertIsPresent().Invoke(driver);
    return (alert != null);
}
于 2015-06-16T22:04:02.120 に答える
13

ExpectedConditionsalertIsPresent()を使用することをお勧めします。ExpectedConditions は、 ExpectedConditionインターフェイスで定義された便利な条件を実装するラッパー クラスです。

WebDriverWait wait = new WebDriverWait(driver, 300 /*timeout in seconds*/);
if(wait.until(ExpectedConditions.alertIsPresent())==null)
    System.out.println("alert was not present");
else
    System.out.println("alert was present");
于 2012-07-16T02:58:32.247 に答える
9

(FF V20 & selenium-java-2.32.0)での例外のキャッチdriver.switchTo().alert();が非常に遅いことがわかりました。Firefox

だから私は別の方法を選択します:

    private static boolean isDialogPresent(WebDriver driver) {
        try {
            driver.getTitle();
            return false;
        } catch (UnhandledAlertException e) {
            // Modal dialog showed
            return true;
        }
    }

また、ほとんどのテスト ケースにダイアログが存在しない場合 (例外のスローはコストがかかる) には、より良い方法です。

于 2013-08-12T08:21:59.260 に答える
8

ExpectedConditionsalertIsPresent()を使用することをお勧めします。ExpectedConditions は、 ExpectedConditionインターフェイスで定義された便利な条件を実装するラッパー クラスです。

public boolean isAlertPresent(){
    boolean foundAlert = false;
    WebDriverWait wait = new WebDriverWait(driver, 0 /*timeout in seconds*/);
    try {
        wait.until(ExpectedConditions.alertIsPresent());
        foundAlert = true;
    } catch (TimeoutException eTO) {
        foundAlert = false;
    }
    return foundAlert;
}

注: これは nilesh による回答に基づいていますが、wait.until() メソッドによってスローされる TimeoutException をキャッチするように調整されています。

于 2015-07-16T11:34:35.633 に答える
1

public boolean isAlertPresent() {

try 
{ 
    driver.switchTo().alert(); 
    system.out.println(" Alert Present");
}  
catch (NoAlertPresentException e) 
{ 
    system.out.println("No Alert Present");
}    

}

于 2017-12-17T05:21:16.250 に答える