web-dev-qa-db-ja.com

WebDriverを使用してアラートが存在するかどうかを確認する方法は?

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

アラートがポップアップすることもあれば、ポップアップしないこともあります。最初にアラートが存在するかどうかを確認する必要があります。その後、アラートを受け入れるか却下できます。アラートが見つからないというメッセージが表示されます。

62
Yunfei Gu
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

79
ManMohan Vyas

以下(C#実装、ただしJavaに類似)を使用すると、例外がなく、WebDriverWaitオブジェクトを作成せずにアラートがあるかどうかを判別できます。

boolean isDialogPresent(WebDriver driver) {
    IAlert alert = ExpectedConditions.AlertIsPresent().Invoke(driver);
    return (alert != null);
}
22
Lee Jensen

ExpectedConditions および alertIsPresent() を使用することをお勧めします。 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");
10
nilesh

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

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

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

また、ほとんどのテストケースにダイアログが表示されていない場合は、より良い方法です(例外のスローは高価です)。

7
andyf

ExpectedConditions および alertIsPresent() を使用することをお勧めします。 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をキャッチするように適合されています。

5
Vince Bowdren

このコードは、アラートが存在するかどうかを確認します。

public static void isAlertPresent(){
    try{
    Alert alert = driver.switchTo().alert();
    System.out.println(alert.getText()+" Alert is Displayed"); 
    }
    catch(NoAlertPresentException ex){
    System.out.println("Alert is NOT Displayed");
    }
    }
2
Vishnu B S

public boolean isAlertPresent(){

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

}

1
Vikas

ExpectedConditionsは廃止されているため、次のとおりです。

        WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(15));
        wait.Until(SeleniumExtras.WaitHelpers.ExpectedConditions.AlertIsPresent());

C#Selenium 'ExpectedConditions is obsolete'

0
CarolCiola
public static void handleAlert(){
          if(isAlertPresent()){
              Alert alert = driver.switchTo().alert();
              System.out.println(alert.getText());
              alert.accept();
            }
          }
          public static boolean isAlertPresent(){
          try{
              driver.switchTo().alert();
              return true;
              }catch(NoAlertPresentException ex){
                    return false;
              }
          }
0
Naveen