我有两个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"
将被移动,而第一个将无法工作,那么它是真的吗?
那么代码的哪种变体更好,为什么呢?
我希望得到精心解答,因为这对工作流程至关重要。
答案 0 :(得分:2)
XPath可能都不是理想的。看到目标HTML和选择目标的描述将需要决定或提供另一种选择。
此外,与所有表现事项一样,先测量。
也就是说,性能不太重要,尤其是在进一步限制选择空间之前,使用@id
或其他锚点来修改缩小的子树。
例如,如果文档中只有一个elem
id
1234
//elem[@id="1234"]/rest-of-xpath
,则使用elem
,您已经淘汰了本文档的其余部分作为性能/可读性/稳健性问题。只要table//td
下方的子树相对温和(通常会是这样),您就可以解决这些问题。
此外,是的,tbody
是一个很好的方式来抽象是否存在comm
。