Chrome DevTools

许多浏览器提供“DevTools”,这是一组与浏览器集成的工具,开发者可以使用它们来调试 Web 应用程序并探索其页面的性能。Google Chrome 的 DevTools 使用一种称为 Chrome DevTools 协议(简称“CDP”)的协议。顾名思义,它不是为测试设计的,也不是为了拥有稳定的 API,因此功能在很大程度上取决于浏览器的版本。

WebDriver 双向协议是 W3C WebDriver 协议的下一代,旨在提供所有浏览器实现的稳定 API,但尚未完成。在此之前,Selenium 为实现它的浏览器(例如 Google Chrome、Microsoft Edge 和 Firefox)提供了对 CDP 的访问,从而允许你以有趣的方式增强测试。下面给出了一些你可以使用它的示例。

使用 Selenium 访问 Chrome DevTools 的方法

有三种不同的方法可以在 Selenium 中访问 Chrome DevTools。如果你在网上寻找其他示例,你可能会看到这些示例的混合和匹配。

  • CDP 端点是用户可用的第一个选项。它仅适用于最简单的事情(设置状态、获取基本信息),并且你必须知道域和方法以及键值对的“魔术字符串”。对于基本要求,这可能比其他选项更简单。这些方法仅暂时支持。
  • 由于您可以异步地设置操作,因此 CDP API 优于仅使用端点。您可以访问代码中的受支持类、方法和参数,而不仅仅是字符串和映射。这些方法也仅受临时支持。
  • 应尽可能使用 BiDi API 选项,因为它完全抽象了实现细节,并且当 Selenium 离开 CDP 时,它将与 CDP 或 WebDriver-BiDi 配合使用。

价值有限的示例

有一些经常被引用的使用 CDP 的示例,但其实际价值有限。

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

查看这些文档中的示例,了解执行其他有用操作的方法


Chrome DevTools 协议端点

Google 提供了一个 /cdp/execute 端点,可以直接访问。每个 Selenium 绑定都提供一种方法,允许您将 CDP 域作为字符串传递,并将所需参数作为简单的映射传递。

Chrome DevTools 协议 API

每个 Selenium 绑定都会动态生成各种 CDP 域和功能的类和方法;这些与特定版本的 Chrome 绑定。

使用 BiDi API 的 Chrome Devtools 协议

这些示例目前使用 CDP 实现,但当使用 WebDriver-BiDi 重新实现该功能时,相同的代码应该也能正常工作。

上次修改时间:2023 年 10 月 18 日:重构 Bidi 文档(#1489)(70802b62157)