这是本节的多页打印视图。 点击此处打印.

返回本页常规视图.

支持的浏览器列表

每个浏览器都有定制和特有的功能。

1 - Chrome 特定功能

特定于 Google Chrome 浏览器的功能和特性.

默认情况下,Selenium 4与Chrome v75及更高版本兼容. 但是请注意Chrome浏览器的版本与chromedriver的主版本需要匹配.

Options

所有浏览器的通用功能请看这 Options page.

Chrome浏览器的特有功能可以在谷歌的页面找到: Capabilities & ChromeOptions

基于默认选项的Chrome浏览器会话看起来是这样:

    System.clearProperty(ChromeDriverService.CHROME_DRIVER_LOG_LEVEL_PROPERTY);
  }
    options = get_default_chrome_options()
    driver = webdriver.Chrome(options=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 参数用于启动浏览器时要使用的命令行开关列表. 有两个很好的资源可以用于研究这些参数:

常用的参数包括 --start-maximized, --headless=new 以及 --user-data-dir=...

向选项添加参数:

    options.add_argument("--start-maximized")
        [TestMethod]
      options.args << '--start-maximized'
    let driver = new Builder()
      .forBrowser(Browser.CHROME)
      .setChromeOptions(options.addArguments('--headless=new'))
      .build();

从指定位置启动浏览器

binary 参数接收一个使用浏览器的备用路径,通过这个参数你可以使用chromedriver 去驱动各种基于Chromium 内核的浏览器.

添加一个浏览器地址到选项中:

    options.binary_location = chrome_bin
        [TestMethod]
      options.add_argument("--user-data-dir=#{user_data_dir}")
    let driver = new Builder()
      .forBrowser(Browser.CHROME)
      .setChromeOptions(options.setChromeBinaryPath(`Path to chrome binary`))
      .build();

添加扩展程序

extensions 参数接受crx文件. 至于解压的目录, 请使用 load-extension 参数代替, 正如 这篇文章 所示.

添加一个扩展程序到选项中:

  @DisabledOnOs(OS.WINDOWS)
    options.add_extension(extension_file_path)
            var options = new ChromeOptions();
            options.UseWebSocketUrl = true;
            options.AddArgument("--remote-debugging-pipe");
            options.AddArgument("--enable-unsafe-extension-debugging");

            driver = new ChromeDriver(options);

            var baseDir = AppDomain.CurrentDomain.BaseDirectory;
            var extensionDir = Path.GetFullPath(Path.Combine(baseDir, "../../../Extensions/webextensions-selenium-example"));

            var bidi = await driver.AsBiDiAsync();
            await bidi.WebExtension.InstallAsync(new ExtensionPath(extensionDir));
    it 'add extensions' do
    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将在驱动过程结束后保持浏览器的打开状态.

添加一个布尔值到选项中:

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 = Selenium::WebDriver::Options.chrome
    let driver = new Builder()
      .forBrowser(Browser.CHROME)
      .setChromeOptions(options.detachDriver(true))
      .build();

排除的参数

Chrome 添加了各种参数,如果你不希望添加某些参数,可以将其传入 excludeSwitches. 一个常见的例子是重新打开弹出窗口阻止程序. 默认参数的完整列表可以参考 Chromium 源码

设置排除参数至选项中:

    driver.get("https://www.selenium.dev/selenium/web/blank.html");
    options.add_experimental_option('excludeSwitches', ['disable-popup-blocking'])
      options = Selenium::WebDriver::Options.chrome
    let driver = new Builder()
      .forBrowser(Browser.CHROME)
      .setChromeOptions(options.excludeSwitches('enable-automation'))
      .build();

服务

创建默认 Service 对象的示例, 以及用于设置驱动程序位置和端口 可以参考 驱动服务 页面.

日志输出

获取驱动程序日志有助于调试问题. 使用 Service 类, 可以指明日志的路径. 除非用户将其定向到某个位置, 否则将忽略日志记录输出.

文件输出

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

    driver = new ChromeDriver(options);
    driver.get("https://www.selenium.dev");

注意: Java 还允许通过系统属性设置文件输出:
属性键: ChromeDriverService.CHROME_DRIVER_LOG_PROPERTY
属性值: 表示日志文件路径的字符串

Selenium v4.11

    service = webdriver.ChromeService(log_output=log_path)
            driver.Url = "https://www.selenium.dev/selenium/web/blank.html";

Selenium v4.10

      service = Selenium::WebDriver::Service.chrome

命令行输出

更改日志记录输出以在控制台中显示为标准输出:

Selenium v4.10


    String fileContent = new String(Files.readAllBytes(logLocation.toPath()));

注意: Java 还允许通过系统属性设置控制台输出;
属性键: ChromeDriverService.CHROME_DRIVER_LOG_PROPERTY
属性值: DriverService.LOG_STDOUTDriverService.LOG_STDERR

Selenium v4.11

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

$stdout and $stderr are both valid values

Selenium v4.10

      service = Selenium::WebDriver::Service.chrome

日志级别

共有六种日志级别: ALL, DEBUG, INFO, WARNING, SEVERE, 以及 OFF. 注意 --verbose 等效于 --log-level=ALL 以及 --silent 等效于 --log-level=OFF, 因此, 此示例只是通用地设置日志级别:

Selenium v4.8

    String fileContent = new String(Files.readAllBytes(logLocation.toPath()));
    Assertions.assertTrue(fileContent.contains("Starting ChromeDriver"));

注意: Java 还允许通过系统属性设置日志级别:
属性键: ChromeDriverService.CHROME_DRIVER_LOG_LEVEL_PROPERTY
属性值: ChromiumDriverLogLevel 枚举的字面值

Selenium v4.11

    service = webdriver.ChromeService(service_args=['--log-level=DEBUG'], log_output=subprocess.STDOUT)

Selenium v4.10

      service.log = file_name

日志文件功能

有 2 个功能仅在写入文件时可用:

  • 追加日志
  • 可读时间戳

要使用它们, 您还需要显式指定日志路径和日志级别. 日志输出将由驱动程序管理, 而不是由进程管理, 因此可能会看到细微的差异.

Selenium v4.8


  @Test

注意: 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)

Selenium v4.8

      service = Selenium::WebDriver::Service.chrome(args: args)

禁用构建检查

Chromedriver 和 Chrome 浏览器版本应该匹配, 如果它们不匹配, 驱动程序将出错. 如果您停用构建检查功能, 则可以强制将驱动程序与任何版本的 Chrome 一起使用. 请注意, 这是一项不受支持的功能, 并且不会调查 bug.

Selenium v4.8


  @Test

注意: Java 还允许通过系统属性禁用构建检查:
属性键: ChromeDriverService.CHROME_DRIVER_DISABLE_BUILD_CHECK
属性值: "true""false"

Selenium v4.11

    service = webdriver.ChromeService(service_args=['--disable-build-check'], log_output=subprocess.STDOUT)
            service.DisableBuildCheck = true;

Selenium v4.8

      service = Selenium::WebDriver::Service.chrome log: file_name, args: ['--verbose']

特殊功能

Casting

你可以驱动 Chrome Cast 设备,包括共享选项卡

        () -> Assertions.assertEquals(networkConditions.getUploadThroughput(), actualConditions.getUploadThroughput())
    );
    ((ChromeDriver) driver).deleteNetworkConditions();
    driver.quit();
  }
        sinks = driver.get_sinks()
        if sinks:
            sink_name = sinks[0]['name']
            driver.start_tab_mirroring(sink_name)
            driver.stop_casting(sink_name)
    it 'casts' do
      @driver = Selenium::WebDriver.for :chrome
      sinks = @driver.cast_sinks
      unless sinks.empty?
        device_name = sinks.first['name']
        @driver.start_cast_tab_mirroring(device_name)

网络条件

您可以模拟各种网络条件.

以下示例适用于本地 webdrivers. 针对远程 webdrivers, 请参考 Remote WebDriver 页面.

    String permissionState = (String) driver.executeScript(script);

    Assertions.assertEquals("denied", permissionState);
    driver.quit();
  }

  @Test
    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)
    it 'gets and sets network conditions' do

日志

    driver.quit();
    logs = driver.get_log("browser")
      @driver = Selenium::WebDriver.for :chrome

权限

    options.setBrowserVersion("stable");
    driver.set_permissions('camera', 'denied')
    it 'sets permissions' do
      @driver = Selenium::WebDriver.for :chrome

DevTools

详见 Chrome DevTools 部分以获取有关使用Chrome DevTools的更多信息

2 - Edge 特定功能

这些是特定于微软Edge浏览器的功能和特性.

微软Edge是用Chromium实现的, 最早支持版本是v79. 与Chrome类似, Edge驱动的主版本号必须与Edge浏览器的主要版本匹配.

Chrome 页面 上找到的所有capabilities和选项也适用于Edge.

选项

所有浏览器的共有功能在 Options 页面.

Chromium独有的功能记录在谷歌的 Capabilities & ChromeOptions

使用基本定义的选项启动 Edge 会话如下所示:


  @Test
    options = get_default_edge_options()
        {
            var options = new EdgeOptions();
      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添加参数:

  public void arguments() {
      options.args << '--start-maximized'
      .setEdgeOptions(options.addArguments('--headless=new'))

在指定位置启动浏览器

binary 参数包含要使用的浏览器备用位置的路径. 使用此参数, 您可以使用 chromedriver 驱动各种基于 Chromium 的浏览器.

在options中添加浏览器位置:

  public void setBrowserLocation() {
      options.binary = edge_location

添加扩展

extensions参数接受 crx 文件. 至于已解压的目录、中提到, 请使用本文中提及的 load-extension.

在options中添加扩展:

    Path path = Paths.get("src/test/resources/extensions/webextensions-selenium-example.crx");
      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.

Note: This is already the default behavior in .NET.

      options.detach = true
      .setEdgeOptions(options.detachDriver(true))

排除参数

MSEdgedriver 有几个用于启动浏览器的默认参数. 如果不希望添加这些参数, 可将它们传递到 excludeSwitches 中. 一个常见的例子就是重新打开弹出窗口拦截器. 默认参数的完整列表参考 Chromium Source Code

在options中设置排除参数:

  public void excludeSwitches() {
      options.exclude_switches << 'disable-popup-blocking'