使用Java的Selenium WebDriver(Selenium 2)中的警报处理

使用Java的Selenium WebDriver(Selenium 2)中的警报处理,java,selenium,selenium-webdriver,popup,alert,Java,Selenium,Selenium Webdriver,Popup,Alert,我想检测是否弹出警报。目前我正在使用以下代码: try { Alert alert = webDriver.switchTo().alert(); // check if alert exists // TODO find better way alert.getText(); // alert handling log().info("Alert detected: {}" + aler

我想检测是否弹出警报。目前我正在使用以下代码:

    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) {
    }
问题是,如果网页的当前状态没有警报,它会等待特定的时间直到达到超时,然后抛出异常,因此性能非常差

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

您可以试试

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

这就是我在这里使用显式等待的原因


编写以下方法:

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();
}
Alert Alert=驱动程序.switchTo().Alert(); alert.accept(); 您还可以拒绝警报框:

Alert alert = driver.switchTo().alert(); alert().dismiss(); Alert Alert=驱动程序.switchTo().Alert(); 警惕().discover();
遗憾的是,这两种解决方案都不起作用。第一个和我的代码一样慢,因为它已经在超时时创建了异常。第二个无法识别警报。@djangofan-你没有恼人的延迟吗?@Alp-到底是什么原因造成的?您指的是什么?如果您使用该代码来验证警报是否存在,则如果警报不存在,则应存在延迟。是这样吗?因为我试图最小化延迟/超时,但没有成功。另外,可能尝试更新selenium jar。当我使用Selenium时,他们几乎每个月发布一次新版本,有时一个月发布两次。这很有趣,而且可以做到这一点。是否可以将wait方法的超时设置为零? Alert alert = driver.switchTo().alert(); alert.accept(); Alert alert = driver.switchTo().alert(); alert().dismiss();
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");
    }