2011-11-23 74 views
34

我想要检测是否弹出警报。目前我使用下面的代码:Selenium WebDriver(selenium 2)和Java中的警报处理

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

的问题是,如果对网页的当前状态没有警觉,等待达到超时,直到特定的时间量,然后抛出一个异常,因此表现非常糟糕。

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

回答

69

这是使用显式的等待从这里WebDriver: Advanced Usage

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

这很有趣,可以做到这一点。是否可以将等待方法的超时设置为零? – Alp

0

你可以尝试

try{ 
     if(webDriver.switchTo().alert() != null){ 
      Alert alert = webDriver.switchTo().alert(); 
      alert.getText(); 
      //etc. 
     } 
    }catch(Exception e){} 

如果不工作,你可以尝试通过所有的窗口句柄循环,看看是否存在警报。我不确定警报是否会作为使用硒的新窗口打开。

for(String s: webDriver.getWindowHandles()){ 
//see if alert exists here. 
} 
+0

可悲的是,这两种解决方案不起作用。第一个和我的代码一样慢,因为它在超时时已经创建了异常。第二个不能识别警报。 – Alp

+0

对不起,这是值得一炮。 –

+0

@Reid Mac - 你的答案适合我。 – djangofan

15

写下面的方法什么工作对我来说:

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

alert.accept(); 

你也可以拒绝该提示框:

 

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

alert().dismiss(); 
2
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"); 
    }