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

Alp*_*Alp 39 java alert popup selenium-webdriver

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

    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) {
    }
Run Code Online (Sandbox Code Playgroud)

问题是,如果对网页的当前状态没有警觉,等待特定的时间量,直到达到超时,则抛出一个异常,因此性能实在是太差了.

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

小智 76

这对我来说很有用,使用显式等待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
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 这很有趣,可以解决问题。是否可以将wait方法的超时设置为零? (2认同)

Rip*_*sim 16

写下面的方法:

public boolean isAlertPresent() {
    try {
        driver.switchTo().alert();
        return true;
    } // try
    catch (Exception e) {
        return false;
    } // catch
}
Run Code Online (Sandbox Code Playgroud)

现在,您可以使用上面所述的方法检查警报是否存在,如下所示:

if (isAlertPresent()) {
    driver.switchTo().alert();
    driver.switchTo().alert().accept();
    driver.switchTo().defaultContent();
}
Run Code Online (Sandbox Code Playgroud)