Selenium 4 alpha 中的 sendDevToolsCommand

sendDevToolsCommand in Selenium 4 alpha

根据这个 article,Selenium 4 alpha 有一个 sendDevToolsCommand 向浏览器发送任意 DevTools 命令和 returns 一个将在命令完成时解析的承诺:

Added “sendDevToolsCommand” and “setDownloadPath” for chrome.Driver.

但我似乎找不到如何使用它。听起来有点像在 Selenium 中使用 JavaScript 执行器。

有人可以提供示例用法吗?我正在使用硒 + Java.

我在 Selenium 文档中找不到 sendDevToolsCommand,但实际上使用 sendDevToolsCommandsource actually has the setDownloadPath that you also mentioned above defined right below。根据该用法,您似乎可以执行以下操作:

const { Builder } = require("selenium-webdriver");

const driverInstance = await new Builder()
  .withCapabilities({ browserName: "chrome" })
  .build();

driverInstance.sendDevToolsCommand('Page.setDownloadBehavior', {
  behavior: 'allow',
  downloadPath: path
})

或者一个直观的例子:

await driverInstance.sendDevToolsCommand("Emulation.setDefaultBackgroundColorOverride", {
  color: { r: 0, g: 255, b: 0, a: 1 } // watch out, it's bright!
});

其中第一个参数是 Chrome Devtools Protocol Domain method (e.g. or Page.setDownloadBehavior or Emulation.setCPUThrottlingRate),第二个参数是包含该域方法选项的对象(如同一协议文档中所述)。

编辑:刚刚测试并且以上有效:)

我很高兴添加了这个,因为这意味着,除了网络节流之外,现在向 Selenium 测试添加 cpu 节流应该是非常简单的!类似于:

driverInstance.sendDevToolsCommand('Emulation.setCPUThrottlingRate', {
  rate: 4 // throttle cpu 4x
}

Selenium 4 版本将为 Chrome DevTools 协议提供用户友好的 API。 我刚刚为 Selenium Java 客户端实现了网络和性能域。 https://github.com/SeleniumHQ/selenium/pull/7212

此外,不久前合并的 Java 客户端中的所有域都有一个通用的 API。 所有这些新功能可能会在下一个 Alpha 版本中发布。

几年前在 Chrome 驱动程序中添加了调用 devtool api 的命令。

即使该方法尚不存在,您也可以将其与 Selenium 一起使用:

  • Print To PDF
  • Block a network URL
  • Save/restore the cookies for all domains

此命令使您可以访问 devtools api,ChromeDriver 在内部使用它来驱动浏览器。

该方法将命令名称作为第一个参数,将参数字典作为第二个参数。要了解如何调用命令,请在搜索中添加 puppeteer。例如puppeteer set download location.

请注意 executeCdpCommand 在 Java master 分支中实现,因此它应该在下一个版本中可用。