当前位置: 首页 > 面试题库 >

通过ID查找元素

闻人嘉颖
2023-03-14
问题内容

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

  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"));。纵观Selenium来源, 大多数 驱动程序只是获取您提供的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)只是一种 感觉 ,或者2)纯净的BS!您已经从其他答案和评论中看到了。

要获得 真实 答案(由实际数据支持),要考虑的变量太多:

  • 由不同的浏览器供应商实施的有线协议,以及不同版本中的各种优化。
  • 由不同的浏览器供应商实现的DOM引擎,以及不同版本中的各种优化。
  • 由不同的浏览器供应商实现的JavaScript引擎,以及不同版本中的各种优化。

此外,由于用于构建该网站的框架的差异,您为Web应用程序/网页获得的任何结果都将最不适用于其他Web应用程序/网页。

底线是:如果您担心性能测试,那么Selenium是错误的答案。Selenium是一个功能测试库,经过优化可为您提供最佳的最终用户表示形式。性能是遥不可及的。

如果您的目标是使测试更快地运行,则可以花更多的时间在测试结构上:

  • 您打开/关闭浏览器的频率。这通常是测试中最耗时的活动。
  • 您多久刷新一次元素缓存,就 需要 多久刷新一次?考虑将您的元素移至Page Factory 模型,该模型会为您延迟加载所有元素。
  • 当然,最大的加速因素:在多台计算机上并行运行测试。

但是我认为这与您最初提出的问题脱离了话题(有些人可能会建议“保证”)。



 类似资料:
  • 问题内容: 如果我使用它,它就会出现..很明显,屏幕上没有任何“找到你”的信息。我究竟做错了什么? 问题答案: 问题是您试图在元素存在之前对其进行访问。您需要等待页面完全加载。一种可能的方法是使用处理程序: 不过,大多数常见的JavaScript库都提供DOM就绪事件。这样比较好,因为也要等待所有图像。在大多数情况下,您不需要这样做。 另一种方法是将script标签放在您的-tag 之前,因为它前

  • 问题内容: 我想通过查找数据。我知道该数据存在并且存在(我已经用pymongo测试了它)。 但是下面的代码找不到它: 它只是给我一个回报。 但是我可以使用pytmongo和python找到它。 结果如下: 有人有什么主意吗? 编辑:我已经尝试了: 但我仍然有0: 问题答案: 您可以使用然后仅传递id值,或者使用,然后还必须使用字段名称指定一个值: 如果没有错误,则表示找到了文档。 如果您始终看到已

  • 请帮助我,我正在尝试选择一个图片,这是一个链接(一个网站上的培训师) 这是我的代码:

  • 问题内容: 我使用上面的python代码来练习一些基本的Selenium操作。我找不到任何元素,无论是名称还是ID。不管我尝试什么,我总是会遇到相同的错误,这表明我要查找的元素不存在。(想法是按一下其中一个按钮…) 这是网站html代码的一部分: 这是所说的网站(链接断开) 任何帮助将不胜感激。 顺便说一句,这是我尝试运行的第一个使用Selenium的程序,是否有可能需要更改某些设置或需要安装其他

  • 我是DOM查询的新手,我想知道是否可以通过Xpath直接查询DOM元素,类似于下面提到的代码? 谢谢

  • 问题内容: 我正在尝试查找具有动态生成ID的元素。字符串的最后一部分是常量(“ ReportViewer_fixedTable”),因此我可以使用它来定位元素。我试图在XPath中使用正则表达式: 并通过CssSelector定位: 都不行。任何建议,将不胜感激。 问题答案: 那是因为需要修改css选择器,而您几乎就在那里… 从https://saucelabs.com/blog/selenium