java - 找不到动态文本的 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 代替,但没有运气。我以前从来没有验证过动态消息,所以我有点卡在这里。
解决方案
如果不是复制/粘贴错误,您的代码似乎有一些错误的地方。
- 应该使用
findElement
,而不是findElements
返回 aList
。 应该调用
getText()
将消息内容返回为String
,然后调用String.contains()
public boolean getInvalidRefNumberErrorMessage(){ return driver.findElement(errorMessage).getText() .contains("My error message will"); }
推荐阅读
- rust - 警告未使用的_doc_comments 宏
- javascript - 使用 Javascript 使用动态 php ID 隐藏和取消隐藏 DIV
- python - 将 Protobuf 插入/更新插入关系数据库的惯用方式
- node.js - 获取 Express.JS 中的 URL 路径(无资产)
- c++ - Rcpp 扩展和导出属性
- php - PHP 联系表不发送电子邮件
- windows - 在 Windows 中,如果我无法将任务管理器置于前台,我该如何终止应用程序?
- javascript - 如何将插件添加到非根 Vue 3 组件?
- ruby - 【RubyMine】调试器不启动
- nxlog - NXLOG 从唯一的日志文件中提取新的多行消息