此页面文档记录了 Cypress 如何通过标准化协议与浏览器通信,以实现浏览器自动化、网络拦截和事件处理。它解释了 Chrome DevTools Protocol (CDP) 和 WebDriver BiDi 如何集成到 Cypress 的架构中以支持不同的浏览器。
有关常规浏览器自动化的信息,请参阅 浏览器自动化。
Cypress 使用不同的协议与浏览器通信
这些协议使 Cypress 能够
来源
ProtocolManager 类是 Cypress 中协议操作的中央协调器。它提供了一个统一的接口,用于与浏览器进行交互,而不管其具体的协议实现。
来源
来源
Cypress 使用不同的客户端实现来通过各自的协议与浏览器通信。
对于 Chrome、Chromium 浏览器和 Electron,Cypress 使用两个主要的客户端类
来源
Firefox 同时支持 WebDriver BiDi(用于较新版本)和 CDP(用于较旧版本)。
来源
Firefox 版本检测逻辑
来源
此图说明了命令如何从 Cypress 流经协议层到达浏览器
来源
此图显示了 Cypress 如何捕获和处理浏览器事件
来源
Chrome DevTools Protocol (CDP) 实现由 CdpAutomation 类处理,该类提供以下主要功能
来源
Firefox 支持两种协议
Firefox 协议选择
来源
协议管理器通过 ProjectBase 类集成到 Cypress 项目生命周期中,该类负责管理测试的初始化、配置和执行。
来源
协议管理器包含强大的错误处理功能,可以捕获和报告协议相关错误,而不会导致 Cypress 崩溃。
来源
Cypress 提供了协议行为的配置选项,包括
来源
理解 Cypress 中协议集成与浏览器自动化的区别非常重要
| 协议集成 | 浏览器自动化 |
|---|---|
| 使用标准化协议(CDP、WebDriver BiDi)与浏览器进行低级通信 | 用于控制浏览器行为的更高级抽象 |
| 处理原始协议命令和事件 | 为测试交互提供用户友好的 API |
| 浏览器特定协议实现 | 跨浏览器的统一自动化接口 |
由 ProtocolManager 管理 | 由 Automation 类管理 |
来源
随着浏览器协议的不断发展,Cypress 被设计为通过以下方式进行适应
Firefox 从 CDP 过渡到 WebDriver BiDi 证明了这种方法
来源