C# Selenium:By.Id(“myelement”)和By.Css(“myelement”)之间有性能差异吗?

C# Selenium:By.Id(“myelement”)和By.Css(“myelement”)之间有性能差异吗?,c#,.net,google-chrome,selenium,specflow,C#,.net,Google Chrome,Selenium,Specflow,我正在为我们的测试人员编写一些关于.NET中的IWebDriver的帮助方法,并开始考虑当您可以使用CSS选择器也可以通过ID获取元素时,是否有一个方法可以通过ID获取元素 我假设,最终,对CSS“#myelement”的请求将被优化为document.getElementById(“myelement”) 是否存在性能差异?当我们可以使用CSS选择器来完成同样的事情时,我们是否应该麻烦使用By.Id和By.Name呢?By.cssSelector()比By.Id()快 使用By.id()查找元

我正在为我们的测试人员编写一些关于.NET中的IWebDriver的帮助方法,并开始考虑当您可以使用CSS选择器也可以通过ID获取元素时,是否有一个方法可以通过ID获取元素

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

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

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
          + "']");
    }
@覆盖
公共列表findElements(SearchContext上下文){
if(FindsById的上下文实例)
return((FindsById)context.findElementsById(id);
return((FindsByXPath)context.findElementsByXPath(“./*[@id=”)+id
+ "']");
}
@凌驾
公共WebElement findElement(SearchContext上下文){
if(FindsById的上下文实例)
返回((FindsById)上下文);
return((FindsByXPath)context.findelementbypath(“./*[@id=”)+id
+ "']");
}

其中as
By.cssSelector
使用CSS引擎。CSS比xpath快,因此,
By.CSS选择器
的运行速度比
By.id

的运行速度要快。我认为唯一的区别是By.id显示您在id中搜索,但是当使用By.CSS(“#”)时,您需要编写更多的代码并了解CSS语法,使用.id比使用.CSS(“#”)更容易阅读和理解imhow您测试的浏览器是什么?Google Chrome(我们也为FireFox设置了web驱动程序,但我们很少运行它)。这实际上并不正确:“使用By.id()查找元素的方法实际上使用xpath:”。第一个if实际上是将您指向
((FindsById)上下文)。这是一个我不理解的构造,因为FindsBy的
上下文实例*
(其中*是any(id,css…)返回true。他们可能正在处理一些奇怪的边缘案件。无论如何,我目前对FF的测试没有显示XPath比CSS慢。所以我想看看数字。不幸的是,SauceLabs已经记下了我的引文。一个曾经存在于的资源:它实际上有统计数据和理由在XPath上使用CSS(Speed就是其中之一)。从那以后,他们把这一页拿下来,换成了你现在看到的内容。我不认为你会注意到任何速度差异,除非你有极端的案例选择器。如中所示,多次使用xpath的
/
子代层次结构,结合动态搜索,如
包含(@attr'),
,还有FF-它们比IE有更好的引擎。如果使用一些复杂的xpath,IE会变慢。现在,谁做得最好有点不重要。不过CSS更简单。看一看,这些就是我刚才说的统计数字