在Selenium WebDriver(selenium 2)中使用Java进行警报处理

我想检测是否popup警报。 目前我正在使用下面的代码:

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) { } 

问题是,如果网页的当前状态没有提示,它会等待特定的时间,直到达到超时,然后抛出exception,因此性能非常糟糕。

有没有更好的方法,可能是一个警报事件处理程序,我可以使用dynamic发生警报?

这是什么对我使用显式等待从这里WebDriver:先进的使用

 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 } } 

写下面的方法:

 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(); } 
 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"); } 
 Alert alert = driver.switchTo()。alert();

 alert.accept();

您也可以拒绝提示框:


 Alert alert = driver.switchTo()。alert();

警报()驳回();

你可以试试

  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. }