【发布时间】:2020-03-06 17:21:17
【问题描述】:
Cypress 和许多其他有关测试 Web 应用程序的帖子建议依靠 data-cy 或 data-test-id 之类的数据属性来定位元素,而不是依靠 id 属性。
我的理解是有两个原因:
- 重新使用组件的现代方式可能导致具有相同类型的多个组件,并且可能导致同一页面上出现多个
IDs- 但这也应该适用于“data-cy”或'data-test-id' 属性。 - 当
IDs与CSS绑定时,往往会更频繁地更改它们,而data-*属性可能不太容易更改。
有人可以详细说明一下推荐吗?
我正在考虑的另一件事是要求我的开发人员将data-test* 属性放在将使用组件的div 标记上——这样测试属性实际上是组件id 属性的上一级和即使在使用同一组件的多个实例的情况下也可能会派上用场。但同样,我不确定为什么与 data-test* 属性相比,div 标记的 id 属性不好。
【问题讨论】:
-
欢迎来到 SO。请花时间阅读How to Ask 和minimal reproducible example。它将帮助您提出可靠的问题,这些问题有望得到有用的答案。正如您提供的链接所指出的,一些 webapp 框架(尤其是 React)具有动态 id 属性。
-
@orde 我认为这个问题没有任何问题,除了提供的第一个链接完全回答了它。 Bhavani,您能否详细说明文档中不清楚的地方?
-
这是一个关于这个主题的好读物:kentcdodds.com/blog/making-your-ui-tests-resilient-to-change
-
html 元素的
id属性实际上不应该被使用,因为至少在早些时候有一个要求,id属性必须是唯一的,因此具有相同类型的多个组件将需要具有不同的 @ 987654341@的带data-属性的就没有这个问题... -
我发现这篇文章解决了这个问题:medium.com/agilix/…。我还是要试试,不过好像很有用。
标签: selenium-webdriver cypress angular-e2e