为什么人们应该更喜欢在IE中使用CSS而不是XPath?

时间:2012-12-20 15:39:25

标签: java css xpath selenium webdriver

我正在开发一个只与IE7和IE8兼容的应用程序。我不知道为什么,但有些人建议在识别IE中的元素时使用CSS而不是XPath。当我访问官方Selenium网站时。我看了消息

  

WebDriver尽可能使用浏览器的本机XPath功能。在那些没有本机XPath支持的浏览器上,我们提供了自己的实现。除非您了解各种xpath引擎中的差异,否则这可能会导致一些意外行为。

我想知道在哪里可以找到各种xpath引擎的差异,在哪种情况下我应该使用CSS,以及在哪些XPath中我特意使用IE。感谢。

4 个答案:

答案 0 :(得分:12)

根据Ashley Wilson的report from sauce labs

<强>赞成

  1. 他们更快
  2. 他们更具可读性
  3. CSS是jQuery的定位策略
  4. 无论如何没有其他人使用XPATH!
  5. 它有点过时,但这里是数字:

    image from cause lab's web site

    就个人而言,我会争论(2) - 声明,我必须同意其余部分。

    <强>缺点

    1. 否&#34;自下而上&#34;导航。 XPath有elem\..\another_elem
    2. Sizzle注入了吗?或者使用浏览器的CSS定位器解析器?取决于浏览器,并且存在不一致。

答案 1 :(得分:4)

在IE中通过XPath建议CSS选择器的最大原因是性能。 IE不像Firefox和Chrome那样提供本机XPath-over-HTML选项。但是,它确实提供了一个本机CSS选择器引擎,它将始终比IE驱动程序中使用的仅JavaScript的XPath引擎实现更快。而且性能比较甚至都不是很接近。我已经看到它对于XPath定位器的测量速度比CSS选择器慢了一个数量级(虽然我目前找不到引用)。在9之前的IE版本中尤其如此,其中IE JavaScript引擎比32位IE9中引入的Chakra JavaScript引擎慢得多。

答案 2 :(得分:1)

使用CSS定位器是最佳选择,不仅适用于IE,也适用于FF和Chrome。 此外,xpath始终是最糟糕的选择,因为它需要解析整个页面以找到一个简单的元素,所以如果你想在测试中获得性能而你可以避免它,那就去做吧。

此外,如果您使用的是pageObjects,我强烈建议您使用cacheLookup,因此该元素只能找到一次:

@CacheLookup
@FindBy(id="doLogin")
private WebElement loginButton;

就个人而言,我会做以下事情:

  • 如果element有css类,请使用此定位器
  • 如果元素具有名称或ID,请使用此定位器
  • 如果上述情况均不存在,则无法使用linkText或 另一个定位器,转到xpath。

答案 3 :(得分:1)

除了速度之外,简洁和清晰是其他原因。

除了速度之外,我发现css通常更短更清洁,更容易阅读。例如:

的xpath:

 //ol[@class='choice-group'//li//label//input

VS

的CSS:

 css=ol.choices-group li label input