【问题标题】:Test automation html element selectors. Element ID or DataAttribute [closed]测试自动化 html 元素选择器。元素 ID 或 DataAttribute [关闭]
【发布时间】:2023-03-29 02:35:01
【问题描述】:

我目前正在为 UI 测试自动化的元素放置一些 ID。这些 ID 仅用于测试。我应该添加数据属性而不是可能使其对未来的开发人员更具可读性(data-testHandle="mybutton")还是应该坚持使用 ID。

w3.org 说:

自定义数据属性旨在存储私有的自定义数据 没有更合适的页面或应用程序 属性或元素。

我倾向于保留 ID,但我的某些部分认为未来的开发人员会认为 ID 未被使用并删除它们。

这里有任何最佳实践。谢谢。

【问题讨论】:

  • 我认为这不应该被关闭。也许它可以用不同的措辞。但是在使用自动化测试时确实会出现这些问题。
  • 未来的开发人员不应该随意删除 ID - 就像他们不会随意删除变量或方法一样:因为其他人可能正在使用它们。如果他们这样做了,自动回归测试将显示出问题。你有自动化测试,不是吗?

标签: html selenium selenium-webdriver automated-tests


【解决方案1】:

这接近于基于意见,这里是有助于做出选择的摘要。

为什么要使用ID 属性:

  • 这是一种常见的并且为每个从事自动化测试的人所熟悉的定位元素的方法
  • 这通常是在页面上定位元素的最快方法,因为 selenium 可以将其归结为执行现代浏览器优化的document.getElementById()(尽管通常端到端的性能结束 UI 测试并不重要)
  • 它是每个 selenium 语言绑定中的内置定位器
  • 如果您使用 Firebug 或 Chrome 开发工具 - CSS 选择器和 XPath 生成工具通常会尽可能使用元素的 ids 提供更强大的定位器
  • 您将构建更短的 CSS 选择器和 XPath 表达式。例如。 #myid .someclass 而不是 [automation-id=myid] .someclass

为什么要使用自定义属性:

  • 如果您将automation-id 属性添加到所有所需的元素,您将在某种程度上将其命名空间/范围用于测试自动化 - 每个人都会从属性名称中知道这是什么。这意味着,与id 属性相反,您将大大减少开发人员故意更改属性的机会,该属性也可以并且通常用于应用程序客户端逻辑(参考thisthis 答案)

另外,这里有一些相关的主题:

【讨论】:

  • +1,我还要补充一点,id 写起来更短:#myid 用于 Css 选择器,id('myid') 用于 XPath。
  • 谢谢!很棒的链接。我认为这篇文章会对其他人有所帮助。
  • 您的第三个链接指向无法投票的博客 (techblog.constantcontact.com/software-development/…) - 因此恕我直言,NOT 是放弃 ID 的一个很好的论据。大多数意见似乎更喜欢 ID 而不是其他属性。反驳共识意见的建议需要更有力的证据。
  • 我不确定是否应该在这里发表评论。我正在开发混合应用程序,并已包含<div id='any_id'> 中的 ID,但 QA 团队无法获得这些 ID。我在这里做错了吗?
  • @JimitPatel 没有足够的信息来回答你,也不是问的正确地方。请在您提出问题的地方单独发帖提供更多信息。
【解决方案2】:

我会使用 data 属性,因为您(或其他人)可能需要使用 ID 来定位 JS 的元素。除了测试之外,没有人需要将您的自定义数据属性作为目标。

【讨论】:

  • 另一方面,通过id 定位元素是最快的。
  • 几乎没有,在测试中它最不重要。以后有选择会更好。
猜你喜欢
  • 2018-04-21
  • 2014-01-23
  • 2012-08-16
  • 2014-04-28
  • 2015-12-03
  • 2021-10-05
  • 1970-01-01
  • 1970-01-01
  • 2013-03-15
相关资源
最近更新 更多