我有一个页面,其中包含“状态”字段,其值为“正在进行中”。现在进行某些操作(按钮单击),状态将更改为“已完成”。 我需要使用Selenium检查相同内容。
getVisibleElement(By.id("status")).getText()
现在问题是,单击按钮后状态不会立即从“正在进行”更改为“已完成”。它发生在几秒钟内收到AJAX响应之后。当我的代码试图断言状态文本时,它实际上得到过时的值,因此它未通过测试。
再次请记住,即使getVisibleElement()已定义超时,但由于该元素无论如何都不会对我有所帮助。它只是在AJAX请求上再次渲染(点击后按钮)。
我该如何修复?可以在断言之前添加固定的延迟工作。如果是,我如何在硒中做到这一点?
答案 0 :(得分:2)
如果您的用例如下
然后您可以像这样使用网络驱动程序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片段,该片段将侦听该值的更改,并在达到所需值或超时开始时返回。
上的答案