selenium-webdriver - 为什么 data-* 属性比普通 ID 属性更适合元素选择?
问题描述
赛普拉斯和许多其他关于测试 Web 应用程序的帖子建议依赖于数据属性,例如data-cy
或data-test-id
用于定位元素,而不是依赖于id
属性。
我的理解是,有两个原因:
- 重用组件的现代方式可能导致具有相同类型的多个组件,并且可能导致
IDs
同一页面上的多个组件 - 但这也应适用于“data-cy”或“data-test-id” ' 属性。 - 当
IDs
与 绑定时CSS
,倾向于更频繁地更改它们,而data-*
属性可能不太容易更改。
有人可以对建议进行更多说明吗?
我正在考虑的另一件事是要求我的开发人员将data-test*
属性放在div
将使用组件的标签上 - 这样测试属性实际上比组件id
属性高一个级别,即使在相同的多个实例的情况下也可能派上用场组件被使用。但同样,我不确定为什么该id
标签div
的属性与属性相比是不好的data-test*
。
解决方案
反模式:使用易变的高度脆弱的选择器。
最佳实践:使用 data-* 属性为选择器提供上下文并将它们与 CSS 或 JS 更改隔离开来。
您编写的每个测试都将包含元素的选择器。为了省去很多麻烦,您应该编写对更改具有弹性的选择器。
我们经常看到用户在针对他们的元素时遇到问题,因为:
您的应用程序可能会使用动态类或 ID 来更改您的选择器会从开发更改中中断到 CSS 样式或 JS 行为 幸运的是,可以避免这两个问题。
不要基于 CSS 属性定位元素,例如:id、class、tag 不要定位可能会更改其 textContent 的元素 添加 data-* 属性以更容易定位元素
关键是 id 和类可以是动态的(也可以是文本内容),因此您总是希望使用像“data-cy”属性这样的静态选择器。
推荐阅读
- linux - 如何在linux中找到甚至没有到100的总和
- java - 如何通过单击按钮停止绘制多段线
- qiskit - 安装 IBM Qiskit 进行量子计算机模拟
- javascript - 玩笑因 TypeError 失败: (0 , _user.default) 不是函数
- flutter - 在颤振中从 API 访问数据
- python - 在python中创建一个wilcoxon秩和测试的for循环以生成p值列表?
- ios - 在 SwiftUI 3 中交换选项卡视图指示器的配色方案
- python - 使用 Python 日志记录消息和标准错误
- json - 带 curl 的 Keycloak POST(创建用户和组)
- javascript - 使变量与对象方法相等