Selenium等待AJAX​​响应

时间:2013-11-12 09:55:33

标签: java selenium automation selenium-webdriver

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

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

现在问题是,单击按钮后状态不会立即从“正在进行”更改为“已完成”。它发生在几秒钟内收到AJAX响应之后。当我的代码试图断言状态文本时,它实际上得到过时的值,因此它未通过测试。

再次请记住,即使getVisibleElement()已定义超时,但由于该元素无论如何都不会对我有所帮助。它只是在AJAX请求上再次渲染(点击后按钮)。

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

2 个答案:

答案 0 :(得分:2)

如果您的用例如下

  1. 用户将来到该页面
  2. 显示正在进行中
  3. 用户按下按钮
  4. 一段时间后文本更改为已完成
  5. 然后您可以像这样使用网络驱动程序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());
    }
    

答案 1 :(得分:0)

使用executeAsync注入一个javascript片段,该片段将侦听该值的更改,并在达到所需值或超时开始时返回。

查看https://stackoverflow.com/a/28057738/475949

上的答案