Edge 特定功能
微软Edge是用Chromium实现的, 最早支持版本是v79. 与Chrome类似, Edge驱动的主版本号必须与Edge浏览器的主要版本匹配.
在 Chrome 页面 上找到的所有capabilities和选项也适用于Edge.
选项
所有浏览器的共有功能在 Options 页面.
Chromium独有的功能记录在谷歌的 Capabilities & ChromeOptions
使用基本定义的选项启动 Edge 会话如下所示:
EdgeOptions options = getDefaultEdgeOptions();
driver = new EdgeDriver(options);
options = get_default_edge_options()
driver = webdriver.Edge(options=options)
var options = new EdgeOptions();
driver = new EdgeDriver(options);
options = Selenium::WebDriver::Options.edge
@driver = Selenium::WebDriver.for :edge, options: options
let options = new edge.Options();
driver = new Builder()
.forBrowser(Browser.EDGE)
.setEdgeOptions(options)
.build();
参数
args
参数用于列出启动浏览器时使用的命令行开关.
有两个很好的资源可用于研究这些参数:
常用参数包括 --start-maximized
、 --headless=new
和 --user-data-dir=...
为options添加参数:
options.addArguments("--start-maximized");
options.add_argument("--start-maximized")
options.AddArgument("--start-maximized");
options.args << '--start-maximized'
.setEdgeOptions(options.addArguments('--headless=new'))
在指定位置启动浏览器
binary
参数包含要使用的浏览器备用位置的路径.
使用此参数, 您可以使用 chromedriver 驱动各种基于 Chromium 的浏览器.
在options中添加浏览器位置:
options.setBinary(getEdgeLocation());
options.binary_location = edge_bin
options.BinaryLocation = GetEdgeLocation();
options.binary = edge_location
添加扩展
extensions
参数接受 crx 文件.
至于已解压的目录、中提到,
请使用本文中提及的 load-extension
.
在options中添加扩展:
options.addExtensions(extensionFilePath);
options.add_extension(extension_file_path)
options.AddExtension(extensionFilePath);
options.add_extension(extension_file_path)
.setEdgeOptions(options.addExtensions(['./test/resources/extensions/webextensions-selenium-example.crx']))
保持浏览器打开
将 detach
参数设置为 true后,
只要不向driver发送退出命令,
就可以在进程结束后保持浏览器打开.
Note: This is already the default behavior in Java.
options.add_experimental_option("detach", True)
Note: This is already the default behavior in .NET.
options.detach = true
.setEdgeOptions(options.detachDriver(true))
排除参数
MSEdgedriver 有几个用于启动浏览器的默认参数.
如果不希望添加这些参数, 可将它们传递到 excludeSwitches
中.
一个常见的例子就是重新打开弹出窗口拦截器.
默认参数的完整列表参考
Chromium Source Code
在options中设置排除参数:
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'
.setEdgeOptions(options.excludeSwitches('enable-automation'))
服务
创建默认服务对象, 设置驱动程序位置和端口的示例可以参考 Driver服务 页面.
日志输出
获取驱动程序日志有助于调试问题。 服务类可让您配置日志的输出。 日志输出会被忽略, 除非用户显示指定.
文件输出
更改日志输出以保存到特定文件:
EdgeDriverService service = new EdgeDriverService.Builder().withLogFile(logLocation).build();
注意: Java同样允许在系统属性中配置文件输出:
Property key: EdgeDriverService.EDGE_DRIVER_LOG_PROPERTY
Property value: String representing path to log file
service = webdriver.EdgeService(log_output=log_path)
service.LogPath = GetLogLocation();
控制台输出
要更改日志输出, 使其在控制台中显示为标准输出:
EdgeDriverService service = new EdgeDriverService.Builder().withLogOutput(System.out).build();
注意: Java同样允许在系统属性中配置控制台输出:
属性键: EdgeDriverService.EDGE_DRIVER_LOG_PROPERTY
属性值: DriverService.LOG_STDOUT
或 DriverService.LOG_STDERR
service = webdriver.EdgeService(log_output=subprocess.STDOUT)
$stdout
and $stderr
are both valid values
service.log = $stdout
日志级别
有 6 种可用的日志级别: ALL
, DEBUG
, INFO
, WARNING
, SEVERE
, 以及 OFF
.
请注意, --verbose
等同于 --log-level=ALL
, 而 --silent
等同于 --log-level=OFF
,
因此, 本例只是一般性地设置日志级别:
EdgeDriverService service =
new EdgeDriverService.Builder().withLoglevel(ChromiumDriverLogLevel.DEBUG).build();
注意: Java同样允许在系统属性中配置日志级别:
属性键: EdgeDriverService.EDGE_DRIVER_LOG_LEVEL_PROPERTY
属性值: String representation of ChromiumDriverLogLevel
enum
service = webdriver.EdgeService(service_args=['--log-level=DEBUG'], log_output=log_path)
日志文件功能
有 2 项功能只有在记录到文件时才可用:
- 追加日志
- 可读时间戳
要使用它们, 还需要明确指定日志路径和日志级别. 日志输出将由driver而非进程管理, 因此可能会出现细微差别.
EdgeDriverService service =
new EdgeDriverService.Builder().withAppendLog(true).withReadableTimestamp(true).build();
注意: Java同样允许在系统属性中配置开闭这些功能:
属性键: EdgeDriverService.EDGE_DRIVER_APPEND_LOG_PROPERTY
以及 EdgeDriverService.EDGE_DRIVER_READABLE_TIMESTAMP
属性值: "true"
或 "false"
service = webdriver.EdgeService(service_args=['--append-log', '--readable-timestamp'], log_output=log_path)
service.args << '--append-log'
service.args << '--readable-timestamp'
禁用构建检查
Edge 浏览器和 msedgedriver 版本应该匹配, 如果不匹配, 驱动程序就会出错. 如果禁用构建检查, 则可以强制驱动程序与任何版本的 Edge 一起使用. 请注意, 这是一项不受支持的功能, 而且不会对错误进行调查.
EdgeDriverService service =
new EdgeDriverService.Builder().withBuildCheckDisabled(true).build();
注意: Java同样允许在系统属性中配置禁用构建检查:
属性键: EdgeDriverService.EDGE_DRIVER_DISABLE_BUILD_CHECK
属性值: "true"
或 "false"
service = webdriver.EdgeService(service_args=['--disable-build-check'], log_output=log_path)
service.DisableBuildCheck = true;
Internet Explorer 兼容模式
微软Edge可以被"Internet Explorer兼容模式"驱动, 该模式使用Internet Explorer驱动类与微软Edge结合使用. 阅读 Internet Explorer 页面 了解更多详情.
特殊功能
某些浏览器实现了其特有的附加功能.
Cast
您可以使用 Edge 驱动 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
网络状况
您可以模拟各种网络状况.
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
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')
开发者工具
有关在 Edge 中使用 DevTools 的更多信息, 请参阅 [Chrome DevTools] 部分.