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

时间:2014-01-16 10:44:15

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

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

我认为,最终,对CSS“#myelement”的请求将最终优化为document.getElementById(“myelement”)。

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

1 个答案:

答案 0 :(得分:2)

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比更快 ,而且By.cssSelector的运行速度比By.id