5

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

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

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

4

4 回答 4

13

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

优点

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

它有点过时了,但是这里是数字:

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

就个人而言,我会争论 (2)-nd 陈述,我必须同意其余的。

缺点

  1. 没有“自下而上”的导航。XPath 有elem\..\another_elem
  2. Sizzle 注射了吗?还是使用了浏览器的 CSS 定位器解析器?取决于浏览器,并且存在不一致。
于 2013-01-04T21:23:12.660 回答
4

在 IE 中建议使用 CSS 选择器而不是 XPath 的最大原因是性能。IE 不像 Firefox 和 Chrome 那样提供原生 XPath-over-HTML 选项。然而,它确实提供了一个原生 CSS 选择器引擎,它总是比 IE 驱动程序中使用的纯 JavaScript XPath 引擎实现更快。性能比较甚至不接近。我已经看到 XPath 定位器比 CSS 选择器慢一个数量级(尽管我现在找不到引用)。在 IE 9 之前的版本中尤其如此,其中 IE JavaScript 引擎比 32 位 IE9 中引入的 Chakra JavaScript 引擎慢得多。

于 2013-01-03T12:55:17.957 回答
1

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

除了速度之外,我发现 css 通常更短、更干净、更易于阅读。例如:

路径:

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

对比

CSS:

 css=ol.choices-group li label input
于 2013-07-24T18:21:02.983 回答
0

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

此外,如果您使用的是 pageObjects,我强烈建议您使用 cacheLookup,这样该元素只会定位一次:

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

就个人而言,我执行以下操作:

  • 如果元素具有 css 类,请使用此定位器
  • 如果元素具有名称或 ID,请使用此定位器
  • 如果以上都不存在,并且您不能使用 linkText 或其他定位器,请使用 xpath。
于 2013-01-07T11:29:06.397 回答