通过id定位元素

2024-04-18

以下定位技术有什么区别?

  1. element(by.id("id"));
  2. element(by.css("#id"));
  3. element(by.xpath("//*[@id='id']"));
  4. browser.executeScript("return document.querySelector('#id');");
  5. browser.executeScript("return document.getElementById('id');");

并且,从绩效视角,哪一种是通过 id 定位元素的最快方法?


你的问题很难回答,当然很难给出一个结论性的答案。事实上,我很想把这个问题标记为“太宽泛”,其他答案和评论也支持这一点。

举个例子,只是你的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,它会为您延迟加载所有元素。
  • 当然,最大的加速因素是:在多台机器上并行运行测试。

但我认为这偏离了你最初的问题的主题(有些人可能会建议“咆哮”)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

通过id定位元素 的相关文章

随机推荐