如何使用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。