【问题标题】:Selenium Wait for AJAX responseSelenium 等待 AJAX 响应
【发布时间】:2013-11-24 09:55:21
【问题描述】:

我有一个页面,其中有一个“状态”字段,其值为“进行中”。现在,在某些操作(单击按钮)上,状态更改为已完成。 我需要使用 Selenium 进行检查。

getVisibleElement(By.id("status")).getText()

现在的问题是,一旦单击按钮,状态不会立即从 In Progress 更改为 Completed。它在几秒钟内收到 AJAX 响应后发生。当我的代码尝试断言状态文本时,它实际上得到了过时的值 In Progress ,因此它没有通过测试。

再次请记住,即使 getVisibleElement() 定义了超时,它在这里对我没有帮助,因为该元素无论如何都存在。它只是在 AJAX 请求(发布按钮单击)时再次呈现。

我该如何解决?可以在断言之前添加一个固定的延迟工作。如果是,我该如何在 selenium 中做到这一点?

【问题讨论】:

    标签: java selenium automation selenium-webdriver


    【解决方案1】:

    如果你的用例如下

    1. 用户会来到页面
    2. 显示进行中
    3. 用户按下按钮
    4. 一段时间后,文本变为已完成

    然后你可以像这样使用 Web Drivers Explicit Waits

    @Test
    public testProgress() {
        driver.get("progressPage.html");
        assertEquals("In Progress", driver.findElement(By.id("progressBar").getText());
        WebElement myDynamicElement = (new WebDriverWait(driver, 10))
           .until(ExpectedConditions.textToBePresentInElement(By.id("progressBar")));
        assertEquals("Completed", driver.findElement(By.id("progressBar").getText());
    }
    

    【讨论】:

      【解决方案2】:

      使用 executeAsync 注入一个 javascript 片段,该片段将监听该值的变化,并在达到所需值或超时时返回。

      看看https://stackoverflow.com/a/28057738/475949上的答案

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-04-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-09-09
        • 1970-01-01
        • 2010-12-17
        相关资源
        最近更新 更多