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

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

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

问题是,如果网页的当前状态没有警报,它会等待特定的时间,直到达到超时,然后引发异常,因此性能非常差。

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


答案 1

这就是从这里使用显式等待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
    }
}

答案 2

编写以下方法:

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();
}

推荐