Edge 特定功能

这些是特定于微软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服务 页面.

日志输出

获取驱动程序日志有助于调试问题。 服务类可让您配置日志的输出。 日志输出会被忽略, 除非用户显示指定.

文件输出

更改日志输出以保存到特定文件:

Selenium v4.10

    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();

控制台输出

要更改日志输出, 使其在控制台中显示为标准输出:

Selenium v4.10

    EdgeDriverService service = new EdgeDriverService.Builder().withLogOutput(System.out).build();

注意: Java同样允许在系统属性中配置控制台输出:
属性键: EdgeDriverService.EDGE_DRIVER_LOG_PROPERTY
属性值: DriverService.LOG_STDOUTDriverService.LOG_STDERR

Selenium v4.11

    service = webdriver.EdgeService(log_output=subprocess.STDOUT)

$stdout and $stderr are both valid values

Selenium v4.10

      service.log = $stdout

日志级别

有 6 种可用的日志级别: ALL, DEBUG, INFO, WARNING, SEVERE, 以及 OFF. 请注意, --verbose 等同于 --log-level=ALL , 而 --silent 等同于 --log-level=OFF, 因此, 本例只是一般性地设置日志级别:

Selenium v4.8

    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)

Selenium v4.10

      service.args << '--log-level=DEBUG'

日志文件功能

有 2 项功能只有在记录到文件时才可用:

  • 追加日志
  • 可读时间戳

要使用它们, 还需要明确指定日志路径和日志级别. 日志输出将由driver而非进程管理, 因此可能会出现细微差别.

Selenium v4.8

    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)

Selenium v4.8

      service.args << '--append-log'
      service.args << '--readable-timestamp'

禁用构建检查

Edge 浏览器和 msedgedriver 版本应该匹配, 如果不匹配, 驱动程序就会出错. 如果禁用构建检查, 则可以强制驱动程序与任何版本的 Edge 一起使用. 请注意, 这是一项不受支持的功能, 而且不会对错误进行调查.

Selenium v4.8

    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;

Selenium v4.8

      service.args << '--disable-build-check'

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] 部分.

最后修改 February 3, 2025: update edge doc (#2158) (b40a1f8a875)