首页 > 解决方案 > 找不到动态文本的 Xpath

问题描述

我正在编写一些 Selenium UI 自动化测试,我目前正在研究一个部分,根据源系统的响应,可能会出现多个验证消息。我有几个不同的消息要触发。

每次在 UI 上显示错误消息时,它都会位于以下元素中,但文本字符串每次都会根据消息的内容而变化,而 id 和 class 保持不变:

<span id="lblErrorText" class="validationError">
    "My error message will appear here"
</span>

在我的页面对象类中,我在方法中使用它们之前定义我的字段。所以我有以下内容:

By errorMessage  = By.xpath("//span[@class='validationError']");

然后,我在方法中使用 errorMessage 将其作为布尔值返回,以使我能够断言。如下:

public boolean getInvalidRefNumberErrorMessage(){
    return driver.findElements(errorMessage).contains("My error message will");
}

但是每次我运行测试时,我都会看到 getInvalidRefNumberErrorMessage 方法返回 FALSE。

我尝试使用 id 代替,但没有运气。我以前从来没有验证过动态消息,所以我有点卡在这里。

标签: javaseleniumxpathautomation

解决方案


如果不是复制/粘贴错误,您的代码似乎有一些错误的地方。

  1. 应该使用findElement,而不是findElements返回 a List
  2. 应该调用getText()将消息内容返回为String,然后调用String.contains()

    public boolean getInvalidRefNumberErrorMessage(){
        return driver.findElement(errorMessage).getText()
                     .contains("My error message will");
    }
    

推荐阅读