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

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

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

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

根据Ashley Wilson的酱实验室报告 :

优点

  1. 他们更快
  2. 它们更具可读性
  3. CSS是jQuery的定位策略
  4. 没有其他人使用XPATH!

这有点过时了,不过这里有数字:

来自原因实验室网站的图片

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

缺点

  1. 没有“自下而上”的导航。 XPath有elem\..\another_elem
  2. Sizzle注射了吗? 还是使用了Browser的CSS定位器解析器? 取决于浏览器,并存在不一致。

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

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

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

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

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

  • 如果element有css类,请使用此定位器
  • 如果element具有name或id,请使用此定位器
  • 如果上述情况都不存在,并且您无法使用linkText或其他定位器,请转到xpath。

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

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

XPath的:

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

VS

CSS:

  css=ol.choices-group li label input