【问题标题】:Why one should prefer using CSS over XPath in IE?为什么在 IE 中更喜欢使用 CSS 而不是 XPath?
【发布时间】:2012-12-08 04:12:22
【问题描述】:

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

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

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

【问题讨论】:

  • 你问了两个问题。第一个(“我在哪里可以找到差异”)对我来说似乎是一个很好的问题。第二个(“我什么时候应该在 Y 上使用 X”)不太适合 SO,因为没有明确的答案,任何好的答案都必须以“这取决于...”开头。请考虑更新问题(和标题),以便第二个“问题”只是一个旁注。
  • 您想比较苹果和香蕉。 XPath 比 CSS 强大得多,因此可以在无法使用 CSS 的情况下使用。即使存在性能差异,如果它们不显着/不明显,使用单一语言会更加一致,在这种情况下,XPath 就是那种单一语言。

标签: java css xpath selenium webdriver


【解决方案1】:

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

【讨论】:

【解决方案2】:

根据 Ashley Wilson 的report from sauce labs

优点

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

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

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

缺点

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

【讨论】:

    【解决方案3】:

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

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

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

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

    • 如果元素有 css 类,使用这个定位器
    • 如果元素有名称或 ID,请使用此定位器
    • 如果以上都不存在,并且您不能使用 linkText 或 另一个定位器,选择 xpath。

    【讨论】:

      【解决方案4】:

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

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

      xpath:

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

      css:

       css=ol.choices-group li label input
      

      【讨论】:

      • 有不一样的,因为css的.choices-group大致匹配xpath的[contains(concat(' ', @class, ' '), 'choices-group ')] stackoverflow.com/a/1604480/872856,但是你的观点当然仍然有效
      猜你喜欢
      • 2015-08-13
      • 1970-01-01
      • 1970-01-01
      • 2011-03-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-09-28
      相关资源
      最近更新 更多