如何在selenium webdriver中处理Safari浏览器的警报?

时间:2016-02-25 11:47:13

标签: javascript jquery selenium selenium-webdriver

代码在所有浏览器中运行良好但在safari浏览器中运行case时警报无法处理。我得到的预测后,警报没有显示在野生动物园中。

  

" org.openqa.selenium.UnhandledAlertException:模态对话框是   打开。 SafariDriver不支持与模态交互   对话框。为避免挂起您的测试,警报已被取消。对于   更多信息,请参阅   http://code.google.com/p/selenium/issues/detail?id=3862:拜托   提供有效的电子邮件地址。"

我也把时间等待但没有用。

2 个答案:

答案 0 :(得分:0)

在执行任何操作之前,您可以使用以下方法处理safari警报: -

JavascriptExecutor js = (JavascriptExecutor) webDriver;
js.executeScript("window.alert = function(){ return true;}");

此java脚本会覆盖您自动化测试用例的网页上的警告框功能。

您需要在获得UnhandledAlertException

的行动之前执行此操作

例如: - 假设您有WebElement el,当您点击el时,您将获得UnhandledAlertException,然后您需要执行以下操作: -

JavascriptExecutor js = (JavascriptExecutor) webDriver;
js.executeScript("window.alert = function(){ return true;}");
el.click();

答案 1 :(得分:-1)

我在Selenium WebDriver中处理Safari浏览器的JavaScript警报,我在这里分享。

public static boolean isAlertPresent(WebDriver driver) {
        try {
            //driver.switchTo().alert();
            WebDriverWait wait = new WebDriverWait(driver, 2);
            wait.until(ExpectedConditions.alertIsPresent());
            return true;
        } // try
        catch (Exception e) {
            return false;
        } // catch
    }

if(isAlertPresent(driver)) {
    Alert alert = driver.switchTo().alert();
    Thread.sleep(3000);
    System.out.println("Alert Text : "+alert.getText());
    alert.accept();
    driver.switchTo().defaultContent();
}

注意:确保在单击生成模式对话框(弹出窗口)的选项卡/按钮后立即添加这些代码行。