【问题标题】:Is xPath the preferred way to target an element during Selenium testing or a fallback?xPath 是在 Selenium 测试或回退期间定位元素的首选方法吗?
【发布时间】:2019-11-12 19:43:51
【问题描述】:

在使用 Selenium IDE 设置测试时,我注意到该应用程序(看似)随机选择了一个元素的定位器。有时是类,有时是 ID,有时是 xPath

那么 xPath 是“后备”吗?也许最好使用 ID(如果可用)来进行更可靠的测试。或者是周围的其他方式? xPath 实际上是在页面上查找元素的黄金标准?

我可以调整你看到的测试,我想知道我是否应该使用 ID 或 xPath。

【问题讨论】:

  • XPath 表达式是否更可靠或更稳定取决于表达式的性质。您能否展示一些“类,有时是 ID,有时是 xPath”的示例?

标签: selenium xpath


【解决方案1】:

根据Choosing a Location Strategy 章节,定位元素的“首选”方式是使用它们的ID attributes

使用元素 ID 或名称定位器在测试性能方面是最有效的,并且还可以使您的测试代码更具可读性,前提是页面源中的 ID 或名称命名良好。 XPath 语句需要更长的时间来处理,因为浏览器必须运行它的 XPath 处理器。众所周知,XPath 在 Internet Explorer 版本 7 中速度特别慢。通过链接文本定位通常很方便且性能良好。但是,此技术特定于链接。此外,如果链接的文本可能经常更改,则按元素定位将是更好的选择。

另一方面,XPath 是最强大的选项,因为:

  • 拥有对页面DOM的完全访问权限
  • 您可以遍历 DOM Axes 并查询元素子/父/兄弟、祖先等。
  • 您可以应用functions and operators,例如contains()starts-with()andornot 等,因此您可以使用 XPath 在任何页面上定位任何元素其他选择器策略并非如此。

【讨论】:

  • 我忽略的那个文档链接甚至说“有时,您必须使用 XPath 定位器。如果页面源没有 ID 或名称属性,您可能有别无选择,只能使用 XPath 定位器。” - 我认为这充分回答了这个问题。非常感谢。
  • 该页面可能已多年未更新。如果您听任何 Selenium 贡献者在会议上发言,您会听到他们一遍又一遍地陈述以避免 XPath。在那篇文章中根本没有提到 CSS 选择器。你应该更喜欢 ID 然后 CSS 选择器然后 XPath(然后只有当你需要通过包含的文本查找元素或需要进行 DOM 遍历时)。
  • @DmitriT 您的最后一个要点不正确。 CSS 选择器可以做所有这些事情。见the spec。此外,所有定位器选项都可以完全访问 DOM,它们只是在其中搜索不同的东西,所以我不确定该语句的含义。使用 ID 搜索整个 DOM,但只搜索包含所需 ID 的元素。
  • @JeffC 您能否使用 CSS 选择器匹配 HTML 表格中属于“foo”标头的第一行中的单元格(假设相关 th 标记的位置可能会改变)?
  • 这是第 2 点,而不是第 3 点。我不是说 CSS 选择器绝对可以做 XPath 可以做的所有事情,但它可以做大部分事情......尤其是第 3 点中列出的所有事情. XPath 可以做的两件事 CSS 选择器无法通过包含的文本和 DOM 导航来查找元素(就像您在问题中给出的示例)。
猜你喜欢
  • 1970-01-01
  • 2022-01-10
  • 1970-01-01
  • 2020-03-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-11
  • 2019-10-13
相关资源
最近更新 更多