【问题标题】:How to handle multiple alert popup confirmation in selenium?如何处理硒中的多个警报弹出确认?
【发布时间】:2017-12-18 18:32:57
【问题描述】:

如何在 selenium 中处理多个警报弹出确认。 例如:如果接受弹出窗口,它会一次又一次地询问同一个窗口。如果该弹出窗口在点击第 5 次确认/关闭后关闭,我们该如何处理。

所以请帮我解决这个问题...

【问题讨论】:

  • 你能分享一个跨越多次的弹出窗口吗?它是警报或模式对话框还是弹出气泡?
  • 这是面试问题之一,弹出窗口可能会接受第一次或任何一次。所以我们想尝试直到关闭弹出窗口。你能帮我解决这个问题吗

标签: java selenium


【解决方案1】:

如果您知道此警报将弹出的确切次数,您可以使用一个简单的循环,其中包含硬编码的重试次数。例如:

int retries = 5;

while (retries > 0) {
    alertTriggerButton.click();

     Alert alert = driver.switchTo().alert();
     alert.accept();

    retries--;

}

您应该修改此代码以确保它根据您的页面行为工作,因此认为响应时间已被考虑在内(换句话说 - 如果需要,请添加相关的等待时间)。

【讨论】:

    【解决方案2】:

    你可以使用while。您正在检查警报是否存在,并且每次出现时,您都会根据您提供的布尔值来解决它。当不再有新警报时,它将中断并继续。

    public static void resolveAllAlerts(WebDriver driver, int timeout, boolean accept) {
        while (isAlertPresent(driver, timeout)) {
            resolveAlert(driver, accept);
        }
    }
    
    
    private static boolean isAlertPresent(WebDriver driver, int timeout) {
        try {
            Alert a = new WebDriverWait(driver, timeout).until(ExpectedConditions.alertIsPresent());
            if (a != null) {
                return true;
            } else {
                throw new TimeoutException();
            }
        } catch (TimeoutException e) {
            // log the exception;
            return false;
        }
    }
    
    private static void resolveAlert(WebDriver driver, boolean accept) {
        if (accept) {
            driver.switchTo().alert().accept();
        } else {
            driver.switchTo().alert().dismiss();
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2015-09-21
      • 1970-01-01
      • 2021-02-13
      • 2015-06-10
      • 2019-12-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多