如何使用WebDriver检查警报是否存在?

我需要在WebDriver中检查Alert的存在。

有时会popup警报,但有时候不会popup。 我需要检查警报是否存在,然后我可以接受或解雇它,否则会说:没有发现警报。

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

以下(C#实现,但在Java中类似)允许您确定是否有没有例外的警报,并且不创buildWebDriverWait对象。

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

我会build议使用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"); 

我发现捕捉driver.switchTo().alert();exceptiondriver.switchTo().alert();Firefox (FF V20&selenium-java-2.32.0)中很慢

所以我select另一种方式:

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

当大多数testing用例不存在对话框时,这是一个更好的方法(抛出exception是昂贵的)。

我会build议使用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。