【问题标题】:Xpath selector difference: pros and consXpath 选择器的区别:优点和缺点
【发布时间】:2015-12-16 00:41:15
【问题描述】:

我有两个 xpath 选择器可以找到完全相同的元素,但我想知道从代码、执行速度、可读性等角度来看哪个更好。

第一个 Xpath:

//*[@id="some_id"]/table/tbody/tr[td[contains(., "Stuff_01")]]//ancestor-or-self::td/input[@value="Stuff_02"]

第二个 Xpath:

//tr[td[@title="Stuff_01"]]//ancestor-or-self::td/input[@value="Stuff_02"]

例如参数是,如果页面的代码将被更改,例如某些"tbody" 将被移动,那么第一个将不起作用,这是真的吗? 那么,哪种代码变体更好,为什么?

我将不胜感激,因为这对工作流程至关重要。

【问题讨论】:

  • 也许我的老问题的答案会有所帮助! stackoverflow.com/questions/34092985/…
  • 部分是这样,谢谢,但不是全部......
  • 我会将其添加为帮助其他用户的答案
  • 1 如果正如您所说,这 至关重要,您应该花时间包含目标 HTML 的简化示例和确切的描述您要选择什么,因为 XPath 都可能不是理想的。 2 性能不太重要;先测量。 3 ...特别是如果您在进一步限制选择空间之前使用@id 或其他锚点来磨练缩减的子树。
  • 请显示您的 HTML 文档的minimal, complete and verifiable 示例。否则,没有人能比@kjhughes 告诉你更多。 XPath 表达式的有用性在很大程度上取决于您应用它们的文档。 (为了再次强调这一点,我们还需要知道您在寻找什么。)

标签: selenium xpath


【解决方案1】:

这两种 XPath 都可能不是理想的。需要查看目标 HTML 和选择目标的描述来决定或提供另一种选择。

此外,与所有性能问题一样,首先要衡量。

也就是说,性能不太重要,特别是如果您在进一步限制选择空间之前使用@id 或其他锚点来磨练缩减的子树。

例如,如果文档中只有一个elemid1234,则通过使用//elem[@id="1234"]/rest-of-xpath,您已经消除了文档的其余部分作为性能/可读性/稳健性问题。只要elem 下的子树相对温和(通常会这样),您就可以解决这些问题。

另外,是的,table//td 是抽象tbody 是否存在的好方法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-21
    • 1970-01-01
    • 1970-01-01
    • 2012-09-27
    • 2011-03-17
    • 1970-01-01
    相关资源
    最近更新 更多