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
,但实际上使用 sendDevToolsCommand
的 source 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 分支中实现,因此它应该在下一个版本中可用。
根据这个 article,Selenium 4 alpha 有一个 sendDevToolsCommand
向浏览器发送任意 DevTools 命令和 returns 一个将在命令完成时解析的承诺:
Added “sendDevToolsCommand” and “setDownloadPath” for chrome.Driver.
但我似乎找不到如何使用它。听起来有点像在 Selenium 中使用 JavaScript 执行器。
有人可以提供示例用法吗?我正在使用硒 + Java.
我在 Selenium 文档中找不到 sendDevToolsCommand
,但实际上使用 sendDevToolsCommand
的 source 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 分支中实现,因此它应该在下一个版本中可用。