你的问题很难回答,当然很难给出一个结论性的答案。事实上,我很想把这个问题标记为“太宽泛”,其他答案和评论也支持这一点。
举个例子,只是你的element(by.id("id"));
。纵观硒源,most驱动程序只需获取您提供的任何 id,并将其传递给有线协议:
public WebElement findElementById(String using) {
if (getW3CStandardComplianceLevel() == 0) {
return findElement("id", using);
} else {
return findElementByCssSelector("#" + cssEscape(using));
}
}
如您所知,每个浏览器供应商都在单独的二进制文件中实现自己的有线协议。请随意深入研究代码,为自己挖更深的坑。
对于其他不支持有线协议的浏览器,例如 HtmlUnit,您只需使用以下内容:
public List<WebElement> findElementsById(String id) {
return findElementsByXPath("//*[@id='" + id + "']");
}
然后他们解析可用的 DOM。
至于你的性能问题,任何人给你的任何东西都将是1)只是一个feeling,或2)纯属废话!您已经可以从收到的其他答案和评论中看到这一点。
为了得到一个real答案(有实际数据支持),需要考虑的变量太多:
- 不同浏览器供应商实现的有线协议,以及不同版本中的各种优化。
- 不同浏览器供应商实现的 DOM 引擎,以及不同版本中的各种优化。
- 不同浏览器供应商实现的 JavaScript 引擎,以及不同版本中的各种优化。
此外,由于用于构建该网站的框架的差异,您从网络应用程序/网页获得的任何结果很可能不适用于不同的网络应用程序/网页。
底线是:如果您关心性能测试,那么 Selenium 是错误的答案。 Selenium 是一个功能测试库,经过优化可为您提供最佳的最终用户表示。性能是一个遥远的事后想法。
如果您的目标是让测试运行得更快,那么您最好将时间花在查看测试结构上:
- 您打开/关闭浏览器的频率。这通常是测试中最耗时的活动。
- 您多久刷新一次元素缓存,您多久刷新一次need到?考虑将元素移至页面Factorymodel,它会为您延迟加载所有元素。
- 当然,最大的加速因素是:在多台机器上并行运行测试。
但我认为这偏离了你最初的问题的主题(有些人可能会建议“咆哮”)。