【问题标题】:Selenium: Alert fails to execute before driver closesSelenium:在驱动程序关闭之前警报无法执行
【发布时间】:2021-04-08 04:07:27
【问题描述】:

我有这样的代码:

public class classTest {
    WebDriver webDriver;
    WebDriverWait wait;

    ExpectedCondition<Boolean> pageLoadCondition = new
            ExpectedCondition<Boolean>() {
                public Boolean apply(WebDriver driver) {
                    return ((JavascriptExecutor) driver)
                            .executeScript("return document.readyState")
                            .equals("complete");
                }
            };

    @BeforeEach
    public void init() {
        webDriver = new FirefoxDriver();
        wait = new WebDriverWait(webDriver, 10);
    }

    @AfterEach
    public void quit() {
        webDriver.quit();
    }

    @Test
    public void Test1() {
            ...
    }

    @Nested
    class classTest2 {
        @BeforeEach
        public void create() {
            ...
        }

        @AfterEach
        public void closeAlert() {
            webDriver.get("https://...");

            ...

            Alert alert = wait.until(ExpectedConditions.alertIsPresent());
            webDriver.switchTo().alert().accept();
        }

        @Test
        public void Test2() {
            ...
        }
   ...           

Test2()完成时,closeAlert()方法被执行。

页面上会显示一条警报,但 accept() 会在 50% 的情况下触发。我的猜测是它没有时间触发,因为quit()方法立即执行,关闭了浏览器。

我在警告后尝试过wait.until(pageLoadCondition);,但这没有帮助。

如何等待警报确认完成?

【问题讨论】:

    标签: selenium selenium-webdriver junit webdriver browser-automation


    【解决方案1】:

    您可以等待在网页上显示/等实际的 WebElement。

    如果您没有特定元素,则可以使用几毫秒的 Thread.sleep
    可能不是理想的解决方案,但只要您只需要等待,没有别的,它应该可以解决问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-05-19
      • 1970-01-01
      • 1970-01-01
      • 2022-11-29
      • 1970-01-01
      • 2019-01-05
      • 1970-01-01
      • 2020-03-22
      相关资源
      最近更新 更多