Selenium:By.Id("myelement")和By.Css("#myelement")之间是否存在性能差异?

Ric*_*ban 6 .net c# selenium google-chrome specflow

我正在围绕.NET中的IWebDriver为我们的测试人员编写一些帮助方法,并开始想知道当你可以使用CSS选择器来获取ID的元素时,是否有任何方法可以通过ID获取元素.

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

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

dda*_*son 3

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
          + "']");
    }
Run Code Online (Sandbox Code Playgroud)

其中asBy.cssSelector使用CSS引擎。CSS比 xpath更快,因此,By.cssSelector运行速度比By.id