【发布时间】:2023-03-21 22:24:01
【问题描述】:
您将如何检查特定的 WebElement 是否已更新?
我有一个执行表单保存的测试,然后 UI 返回成功/错误消息。
我正在进行一系列保存,我需要测试并查看消息是否符合预期。
Selenium 的速度如此之快,以至于浏览器根本没有机会赶上。
这是我用于测试错误消息的代码(还有一个等效的成功消息函数)
public void assertErrorMessage(String errorMsg) {
// set the wait time a bit so the page can load.
driver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS);
List<WebElement> results = driver.findElements(By.xpath("//div[@id='lift__noticesContainer__']/descendant::*"));
boolean success = false;
String message = "";
for (WebElement result : results) {
String id = result.getAttribute("id");
if (id.contains("___error")) {
success = true;
}
if (result.getTagName().equals("li")) {
message += result.getText().trim();
}
}
Assert.assertTrue(success, "No error message generated");
Assert.assertTrue(message.equals(errorMsg), "Expecting message: \"" + errorMsg + "\" but got \"" + message + "\"");
}
在编写时,它会查找特定<div> 的存在并检查是否包含某些属性。如果是,请获取消息。
问题是,这将永远是正确的,因此我的测试失败了,因为消息与之前的消息不同,但是 UI 还没有跟上 selenium 的位置。
到目前为止,我的解决方案是强制 Thread.sleep(2000) 暂停一下以让 UI 跟上。我知道使用 Thread.sleep() 是不受欢迎的。
即(伪代码)
page.setField("value");
page.save();
Thread.sleep(2000);
page.assertErrorMessage("Error message");
有什么方法可以让我检查 WebElement 是否已更新?如果是这样,我可以使用 Selenium 等待来测试它。
或者也许其他人对如何做到这一点有建议?
提前致谢。
【问题讨论】:
标签: java selenium webdriver selenium-webdriver