【问题标题】:Is it possible to combine multiple commands in single webdriver http call?是否可以在单个 webdriver http 调用中组合多个命令?
【发布时间】:2018-03-22 19:09:30
【问题描述】:

我正在使用 Java 中的 Selenium 和远程网格。当我在页面上找到一个元素时,我想检索其文本,该元素的多个属性,检查它是否显示以及是否启用。

据我所知,我检索到的每一件事都会触发一个新的远程调用(到 webdriver 的 http 端点)。因为我事先知道我对哪些值感兴趣,所以我想将它们组合在一个 http 调用中(因为调用可能很慢)。这在 Selenium 和 Java 中是否可行?甚至使用 webdriver 协议?

需要明确的是:我的问题不是一次性找到基于多个条件的元素,我知道该怎么做。但是之后我找到了我想知道多个属性值的元素,我想高效地收集这些。

据我所知,该协议要求对每个属性值、文本、元素是否显示以及是否启用单独调用。对我来说,这意味着例如 6 次往返服务器,如果我能够“多路复用”我想在一次调用中检索的所有数据,一次就足够了。

找到元素后,有没有办法优化检索元素的多个详细信息/属性?

【问题讨论】:

  • 我只能考虑 javascript 的解决方法,但无法从 selenium 服务器端捆绑命令
  • 我认为没有任何预定义的类/方法可以从中获取这些信息。可能您需要创建一个自定义类/方法并使用驱动程序实例,您需要收集有关您想要的多个属性值的信息。

标签: selenium selenium-webdriver webdriver


【解决方案1】:

在驱动程序和服务器之间减少调用的解决方案可能是在客户端/窗口的上下文中使用一些 javascript。

你可以写类似的东西

combinedObject = driver.executeScript("function(domelement) {
  return { abc: domelement.getAttribute('abc'), efg: domelement.getAttribute('efg'), hij: domelement.getAttribute('hij') };
}",foundedElement);

这可以减少驱动程序和服务器之间的调用次数。

如果将一些 javascript 函数与您的 java 代码混合使用是您的决定。

【讨论】:

  • 好主意。 domelement 应该是 arguments[0],对吗?
  • 没有。在 Java 上下文中,foundedElement 是 WebElement 并传递给 executeScript 函数。 Webdriver 在 Javascript/Client 端将此元素转换为 DOMElement。它作为参数传递给 javascript 函数。 (在示例中作为参数 domelement)。
  • 但你也可以使用参数[0]。它指向与 domelement 相同的对象。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-13
  • 1970-01-01
  • 2014-08-15
  • 2020-08-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多