繁体   English   中英

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

[英]Alert handling in Selenium WebDriver (selenium 2) with 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) {
    }

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

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

这就是使用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();
}
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");
    }

你可以试试

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM