0

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

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

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

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

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

4

2 回答 2

2

如果你的用例如下

  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());
}
于 2013-11-12T12:39:21.883 回答
0

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

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

于 2015-12-13T11:02:50.397 回答