Chrome DevTools 协议

在 Selenium 中使用 Chrome DevTools 协议的示例。在 WebDriver BiDi 实现之前,CDP 支持是临时的。

许多浏览器都提供“DevTools”——一套与浏览器集成的工具,开发人员可以使用这些工具调试 Web 应用程序并探索其页面的性能。Google Chrome 的 DevTools 使用一种名为 Chrome DevTools 协议(简称“CDP”)的协议。顾名思义,这并非为测试而设计,也没有稳定的 API,因此功能高度依赖于浏览器的版本。

Selenium 正在努力实现一种基于标准、跨浏览器、稳定的 CDP 替代方案,称为 [WebDriver BiDi]。在对新协议的支持完成之前,Selenium 计划在适用情况下提供对 CDP 功能的访问。

在 Selenium 中使用 Chrome DevTools 协议

Chrome 和 Edge 有发送基本 CDP 命令的方法。这不适用于需要双向通信的功能,并且您需要知道何时启用哪些域以及域/方法/参数的确切名称和类型。

    Map<String, Object> cookie = new HashMap<>();
    cookie.put("name", "cheese");
    cookie.put("value", "gouda");
    cookie.put("domain", "www.selenium.dev");
    cookie.put("secure", true);
    ((HasCdp) driver).executeCdpCommand("Network.setCookie", cookie);
    cookie = {'name': 'cheese',
              'value': 'gouda',
              'domain': 'www.selenium.dev',
              'secure': True}

    driver.execute_cdp_cmd('Network.setCookie', cookie)
            var cookie = new Dictionary<string, object>
            {
                { "name", "cheese" },
                { "value", "gouda" },
                { "domain", "www.selenium.dev" },
                { "secure", true }
            };
            ((ChromeDriver)driver).ExecuteCdpCommand("Network.setCookie", cookie);
    driver.execute_cdp('Network.setCookie',
                       name: 'cheese',
                       value: 'gouda',
                       domain: 'www.selenium.dev',
                       secure: true)

为了更容易使用 CDP 并提供对更高级功能的访问,Selenium 绑定会自动为最常见的域生成类和方法。但是,CDP 方法和实现可能会因版本而异,因此您需要保持 Chrome 版本和 DevTools 版本匹配。Selenium 在任何给定时间都支持 Chrome 的 3 个最新版本,并尝试安排发布时间以确保可以访问最新版本。

这种限制为多个绑定带来了额外的挑战,其中动态生成的 CDP 支持要求用户定期更新其代码以引用正确的 CDP 版本。在某些情况下,已经创建了一种理想化的实现,该实现应该适用于任何 CDP 版本,而无需用户更改其代码,但这并非总是可用。

有关如何在 Selenium 测试中使用 CDP 的示例可以在以下页面找到,但我们想指出一些常见的示例,这些示例的实际价值有限。

  • 地理位置 — 几乎所有站点都使用 IP 地址来确定物理位置,因此设置模拟地理位置很少能达到预期的效果。
  • 覆盖设备指标 — Chrome 提供了一个很棒的 API,用于在 Options 类中设置 移动设备模拟,这通常比尝试使用 CDP 执行此操作更优越。

Chrome DevTools 日志记录功能

使用 CDP 的日志记录功能。

Chrome DevTools 网络功能

使用 CDP 的网络功能。

Chrome DevTools 脚本功能

使用 CDP 的脚本功能。

上次修改时间:2024 年 7 月 10 日: 发布 4.22 更新 (#1765) (fa7b1165ed0)