可以使用这样的xpath来查找web元素吗?

时间:2018-03-27 00:49:54

标签: selenium xpath

考虑这个应始终返回一个元素的xpath。

//div[@id='MyDiv123']/div[contains(@class, 'super')]

假设我们不再添加类为super的div。鉴于这些信息,我认为使用/div[contains(@class, 'super')]不是一个好主意,因为如果将div[contains(@class, 'super')]放在另一个元素中,xpath将会中断。

我们不应该使用//div[contains(@class, 'super')]吗?

2 个答案:

答案 0 :(得分:2)

我不喜欢将XPath用于可以编写为CSS选择器的定位器。

我觉得它简单得多
#MyDiv123 > div.super

或只是

div.super

如果它在页面上是唯一的。

XPath contains()是字符串匹配。下面的所有元素都将匹配您的XPath定位器,但它们都不匹配上面的CSS选择器。

<div class="super-duper" ...>
<div class="superior" ...>
<div class="abcsuperdef" ...>

......你明白了......

答案 1 :(得分:0)

编写 xpaths 时,没有定义最佳实践。这一切都归结为 xpath 的有效性。

我没有看到 xpath 的任何问题:

//div[@id='MyDiv123']/div[contains(@class, 'super')]

粗略有一些改进如下:

  • 作为最终用户,您无法确定属性超级如何影响 HTML 或哪些元素具有此属性。因此,在这种情况下,要唯一地标识 WebElement ,最好将 id 的祖先<div>标记包含为 MyDiv123 。< / LI>
  • classname super 看起来似乎不是动态的。因此,您可以避免 xpath 中的关键字 contains 并将其重写为:

    //div[@id='MyDiv123']/div[@class='super']