【问题标题】:Selenium: Is there a performance difference between By.Id("myelement") and By.Css("#myelement")?Selenium:By.Id("myelement") 和 By.Css("#myelement") 之间有性能差异吗?
【发布时间】:2014-02-05 05:24:43
【问题描述】:

我正在为 .NET 中的 IWebDriver 为我们的测试人员编写一些辅助方法,并开始想知道是否有一种方法可以通过 ID 获取元素,当您可以使用 CSS 选择器也可以通过身份证。

我假设最终,对 CSS "#myelement" 的请求将被优化为 document.getElementById("myelement")。

有性能差异吗?当我们可以使用 CSS 选择器来完成同样的事情时,我们是否应该使用 By.Id 和 By.Name?

【问题讨论】:

  • 我认为唯一的区别是By.Id显示的是你通过id搜索,但是在使用By.Css("#")时,你需要多写一些,并且要了解CSS语法,它是更容易阅读和理解 By.Id 然后 By.Css("#") 恕我直言
  • 您正在测试哪些浏览器?
  • Google Chrome(我们也为 FireFox 设置了网络驱动程序,但我们很少运行它)。

标签: c# .net google-chrome selenium specflow


【解决方案1】:

By.cssSelector()By.id() 快​​。

使用By.id()查找元素的方法实际上是利用xpath:

    @Override
    public List<WebElement> findElements(SearchContext context) {
      if (context instanceof FindsById)
        return ((FindsById) context).findElementsById(id);
      return ((FindsByXPath) context).findElementsByXPath(".//*[@id = '" + id
          + "']");
    }

    @Override
    public WebElement findElement(SearchContext context) {
      if (context instanceof FindsById)
        return ((FindsById) context).findElementById(id);
      return ((FindsByXPath) context).findElementByXPath(".//*[@id = '" + id
          + "']");
    }

By.cssSelector 使用 CSS 引擎。 CSS 比 xpath 更快,ergo,By.cssSelector 将比 By.id 运行得更快

【讨论】:

  • 这实际上是不正确的:“使用 By.id() 查找元素的方法实际上是利用 xpath:”。第一个 if 实际上将您定向到((FindsById) context).findElementsById(id);。这是一个我不理解的构造,因为context instanceof FindsBy*(其中* 是任何(id,css ..))返回true。他们可能在这里处理一些奇怪的边缘情况。无论如何,我目前对 FF 的测试并没有显示 XPath 比 CSS 慢。
  • 所以我想看数字。
  • 不幸的是 - SauceLabs 删除了我的引文。曾经存在于:saucelabs.com/resources/selenium/css-selectors 的资源实际上有统计数据和使用 CSS over XPath 的理由(速度就是其中之一。)。从那以后,他们将页面撤下并替换为您现在看到的内容。除非您有极端情况选择器,否则我认为您不会注意到任何速度差异。如,多次使用 xpath 的 // 后代层次结构,结合动态搜索,如 contains(@attr, '')
  • 此外,对于 FF,它们的引擎比 IE 更好。如果使用一些复杂的 XPath,IE 会变慢。现在,哪个会做得最好已经无关紧要了。不过,CSS 更简单。采取look at this这些是我在谈论的统计数据
猜你喜欢
  • 1970-01-01
  • 2014-03-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-17
  • 2022-01-28
  • 2010-10-25
  • 2018-09-09
相关资源
最近更新 更多