selenium webdriver测试webelement已更新

时间:2012-07-20 13:42:26

标签: java selenium webdriver selenium-webdriver

您将如何检查特定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等待测试。

或许其他人对如何做到这一点有建议?

提前致谢。

1 个答案:

答案 0 :(得分:2)

如果每次执行page.save()时显示的结果都会继续。

确保代码等待浏览器更新邮件的最佳方法是使用WebDriverWait对象。

一个简单的例子是 -

new WebDriverWait(driver, 10).until(ExpectedConditions.textToBePresentInElement(By.xpath("xpath"), "message"));

您可以检查该特定元素是否包含您要查找的消息。如果10秒后该消息不存在,则抛出TimedOutException。

您可以根据自己的情况查看ExpectedConditions的更多变体形式。希望这会对你有所帮助。