【问题标题】:selenium web driver test web element has been updatedselenium web 驱动程序测试 web 元素已更新
【发布时间】: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 + "\"");

}

在编写时,它会查找特定&lt;div&gt; 的存在并检查是否包含某些属性。如果是,请获取消息。

问题是,这将永远是正确的,因此我的测试失败了,因为消息与之前的消息不同,但是 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


    【解决方案1】:

    如果每次执行 page.save() 时显示的结果都不断得到。

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

    一个简单的例子是 -

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

    您可以检查该特定元素是否包含您要查找的消息。如果该消息在 10 秒后仍未出现,则会引发 TimedOutException。

    您可以查看更多适合您情况的 ExpectedConditions 变体。希望对您有所帮助。

    【讨论】:

    • @user1410479 我认为这是正确的做法 - 只需尝试等待正确的消息出现即可。如果您断言预期的消息,它会很好地工作。如果你用它来等待不应该出现的消息,它显然会使你的测试运行很长时间(每条这样的消息需要 10 秒)。
    • 感谢您对此的帮助。你的建议奏效了!我将上述方法更改为 2 行!我不知道为什么我没有等待消息。隐式等待和显式等待的用法仍然让我感到困惑。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-09-19
    • 2020-12-29
    • 1970-01-01
    • 2021-11-21
    • 1970-01-01
    • 2019-05-04
    • 2015-10-08
    相关资源
    最近更新 更多