Chrome 特定功能
默认情况下,Selenium 4 与 Chrome v75 及更高版本兼容。请注意,Chrome 浏览器的版本和 chromedriver 的版本必须匹配主版本。
选项
所有浏览器通用的功能在选项页面上描述。
Chrome 和 Chromium 特有的功能在 Google 的 Capabilities & ChromeOptions 页面上记录。
使用基本定义的选项启动 Chrome 会话如下所示
ChromeOptions options = new ChromeOptions();
driver = new ChromeDriver(options); options = webdriver.ChromeOptions()
driver = webdriver.Chrome(options=options) var options = new ChromeOptions();
driver = new ChromeDriver(options); options = Selenium::WebDriver::Options.chrome
@driver = Selenium::WebDriver.for :chrome, options: options const Options = new Chrome.Options();
let driver = new Builder()
.forBrowser(Browser.CHROME)
.setChromeOptions(Options)
.build();参数
args 参数用于在启动浏览器时使用的一系列命令行开关。 有两个很好的资源可以用来研究这些参数
常用的 args 包括 --start-maximized、--headless=new 和 --user-data-dir=...
向选项添加一个参数
options.addArguments("--start-maximized"); options.add_argument("--start-maximized") options.AddArgument("--start-maximized"); options.args << '--start-maximized' let driver = new Builder()
.forBrowser(Browser.CHROME)
.setChromeOptions(options.addArguments('--headless=new'))
.build();在指定位置启动浏览器
binary 参数接受要使用的备用浏览器位置的路径。 通过此参数,您可以使用 chromedriver 来驱动各种基于 Chromium 的浏览器。
向选项添加浏览器位置
options.setBinary(getChromeLocation()); options.binary_location = chrome_bin options.BinaryLocation = GetChromeLocation(); options.binary = chrome_location let driver = new Builder()
.forBrowser(Browser.CHROME)
.setChromeOptions(options.setChromeBinaryPath(`Path to chrome binary`))
.build();添加扩展程序
extensions 参数接受 crx 文件。至于解压缩的目录,请改用 load-extension 参数,如此帖子中所述。
向选项添加扩展程序
options.addExtensions(extensionFilePath); options.add_extension(extension_file_path) options.AddExtension(extensionFilePath); options.add_extension(extension_file_path) const options = new Chrome.Options();
let driver = new Builder()
.forBrowser(Browser.CHROME)
.setChromeOptions(options.addExtensions(['./test/resources/extensions/webextensions-selenium-example.crx']))
.build();保持浏览器打开
将 detach 参数设置为 true 将在进程结束后保持浏览器打开,只要没有向驱动程序发送 quit 命令。
注意:这已经是 Java 中的默认行为。
options.add_experimental_option("detach", True)注意:这已经是 .NET 中的默认行为。
options.detach = true let driver = new Builder()
.forBrowser(Browser.CHROME)
.setChromeOptions(options.detachDriver(true))
.build();排除参数
Chromedriver 有几个默认参数用于启动浏览器。 如果您不希望添加这些参数,请将它们传递到 excludeSwitches 中。 一个常见的例子是重新打开弹出窗口拦截器。可以从Chromium 源代码中解析出完整的默认参数列表
在选项中设置排除的参数
options.setExperimentalOption("excludeSwitches", List.of("disable-popup-blocking")); options.add_experimental_option('excludeSwitches', ['disable-popup-blocking']) options.AddExcludedArgument("disable-popup-blocking"); options.exclude_switches << 'disable-popup-blocking' let driver = new Builder()
.forBrowser(Browser.CHROME)
.setChromeOptions(options.excludeSwitches('enable-automation'))
.build();服务
有关创建默认 Service 对象以及设置驱动程序位置和端口的示例,请参见驱动程序服务页面。
日志输出
获取驱动程序日志有助于调试问题。 Service 类允许您指定日志的输出位置。 除非用户将其定向到某个位置,否则日志输出将被忽略。
文件输出
要更改日志输出以保存到特定文件
ChromeDriverService service =
new ChromeDriverService.Builder().withLogFile(logLocation).build();注意:Java 还允许通过系统属性设置文件输出
属性键:ChromeDriverService.CHROME_DRIVER_LOG_PROPERTY
属性值:表示日志文件路径的字符串
service.LogPath = GetLogLocation();控制台输出
要更改日志输出以在控制台中显示为 STDOUT
ChromeDriverService service =
new ChromeDriverService.Builder().withLogOutput(System.out).build();注意:Java 还允许通过系统属性设置控制台输出;
属性键:ChromeDriverService.CHROME_DRIVER_LOG_PROPERTY
属性值:DriverService.LOG_STDOUT 或 DriverService.LOG_STDERR
日志级别
有 6 个可用的日志级别:ALL、DEBUG、INFO、WARNING、SEVERE 和 OFF。请注意,--verbose 等效于 --log-level=ALL,--silent 等效于 --log-level=OFF,因此此示例只是泛型地设置日志级别
ChromeDriverService service =
new ChromeDriverService.Builder().withLogLevel(ChromiumDriverLogLevel.DEBUG).build();注意:Java 还允许通过系统属性设置日志级别
属性键:ChromeDriverService.CHROME_DRIVER_LOG_LEVEL_PROPERTY
属性值:ChromiumDriverLogLevel 枚举的字符串表示形式
service = webdriver.ChromeService(service_args=['--log-level=DEBUG'], log_output=subprocess.STDOUT)日志文件功能
只有在记录到文件时才可用 2 个功能
- 附加日志
- 可读时间戳
要使用它们,您还需要显式指定日志路径和日志级别。日志输出将由驱动程序而不是进程管理,因此可能会出现细微的差异。
ChromeDriverService service =
new ChromeDriverService.Builder().withAppendLog(true).withReadableTimestamp(true).build();注意:Java 还允许通过系统属性切换这些功能
属性键:ChromeDriverService.CHROME_DRIVER_APPEND_LOG_PROPERTY 和 ChromeDriverService.CHROME_DRIVER_READABLE_TIMESTAMP
属性值:"true" 或 "false"
service = webdriver.ChromeService(service_args=['--append-log', '--readable-timestamp'], log_output=log_path) service.args << '--append-log'
service.args << '--readable-timestamp'禁用构建检查
Chromedriver 和 Chrome 浏览器版本应匹配,如果不匹配,驱动程序将出错。 如果禁用构建检查,则可以强制驱动程序与任何版本的 Chrome 一起使用。 请注意,这是一个不受支持的功能,不会调查错误。
ChromeDriverService service =
new ChromeDriverService.Builder().withBuildCheckDisabled(true).build();注意:Java 还允许通过系统属性禁用构建检查
属性键:ChromeDriverService.CHROME_DRIVER_DISABLE_BUILD_CHECK
属性值:"true" 或 "false"
service = webdriver.ChromeService(service_args=['--disable-build-check'], log_output=subprocess.STDOUT) service.DisableBuildCheck = true;特殊功能
某些浏览器实现了它们特有的附加功能。
投屏
您可以驱动 Chrome Cast 设备,包括共享标签页
List<Map<String, String>> sinks = driver.getCastSinks();
if (!sinks.isEmpty()) {
String sinkName = sinks.get(0).get("name");
driver.startTabMirroring(sinkName);
driver.stopCasting(sinkName);
} sinks = driver.get_sinks()
if sinks:
sink_name = sinks[0]['name']
driver.start_tab_mirroring(sink_name)
driver.stop_casting(sink_name) sinks = @driver.cast_sinks
unless sinks.empty?
device_name = sinks.first['name']
@driver.start_cast_tab_mirroring(device_name)
expect { @driver.stop_casting(device_name) }.not_to raise_exception
end网络条件
您可以模拟各种网络条件。
ChromiumNetworkConditions networkConditions = new ChromiumNetworkConditions();
networkConditions.setOffline(false);
networkConditions.setLatency(java.time.Duration.ofMillis(20)); // 20 ms of latency
networkConditions.setDownloadThroughput(2000 * 1024 / 8); // 2000 kbps
networkConditions.setUploadThroughput(2000 * 1024 / 8); // 2000 kbps
((ChromeDriver) driver).setNetworkConditions(networkConditions); network_conditions = {
"offline": False,
"latency": 20, # 20 ms of latency
"download_throughput": 2000 * 1024 / 8, # 2000 kbps
"upload_throughput": 2000 * 1024 / 8, # 2000 kbps
}
driver.set_network_conditions(**network_conditions) @driver.network_conditions = {offline: false, latency: 100, throughput: 200}日志
LogEntries logs = driver.manage().logs().get(LogType.BROWSER); logs = driver.get_log("browser") logs = @driver.logs.get(:browser)权限
driver.setPermission("camera", "denied"); driver.set_permissions('camera', 'denied') @driver.add_permission('camera', 'denied')
@driver.add_permissions('clipboard-read' => 'denied', 'clipboard-write' => 'prompt')DevTools
有关使用 Chrome DevTools 的更多信息,请参见Chrome DevTools部分




