Puppeteer 支持跨浏览器 WebDriver BiDi 标准

我们很高兴地宣布,Puppeteer 现在支持下一代跨浏览器 WebDriver BiDi 标准。这个新协议使 Web 开发人员能够轻松编写跨多个浏览器引擎工作的自动化测试。

如何使用 Puppeteer 与 Firefox 结合使用?

WebDriver BiDi 协议从 Puppeteer v21.6.0 开始支持。在调用 puppeteer.launch 时,将 "firefox" 作为产品选项传入,并将 "webDriverBiDi" 作为协议选项传入

const browser = await puppeteer.launch({
  product: 'firefox',
  protocol: 'webDriverBiDi',
})

您也可以在 Chrome 中测试时使用 "webDriverBiDi" 协议,这反映了 WebDriver BiDi 为现代跨浏览器自动化提供了一个单一标准的事实。

将来,我们希望 "webDriverBiDi" 在 Puppeteer 中使用 Firefox 时成为默认协议。

Puppeteer 难道还没有支持 Firefox 吗?

Puppeteer 已经对 Firefox 提供了实验性支持,基于对专有 Chrome DevTools 协议 (CDP) 的部分重新实现。这种方法的优势在于它无需对现有的 Puppeteer 代码进行重大更改即可运行。然而,Firefox 中的 CDP 实现并不完整,存在重大的技术限制。此外,CDP 协议本身并非设计为跨浏览器使用,并且经常发生重大更改,使其不适合作为跨浏览器自动化的长期解决方案。

为了克服这些问题,我们与 W3C 的 WebDriver 工作组合作,创建了一个满足现代浏览器自动化客户端需求的标准自动化协议:这就是 WebDriver BiDi。有关协议设计以及它与传统的基于 HTTP 的 WebDriver 协议相比如何的更多详细信息,请参阅我们之前 文章

随着标准化过程的进展,Puppeteer 团队在 Puppeteer 中添加了 WebDriver BiDi 后端,并对规范提供了反馈,以确保它满足 Puppeteer 用户的需求,并且协议设计能够使现有的基于 CDP 的工具轻松过渡到 WebDriver BiDi。最终结果是一个基于开放标准的单一协议,可以在 Puppeteer 中驱动 Chrome 和 Firefox。

所有 Puppeteer 功能都支持吗?

还没有;WebDriver BiDi 仍在开发中,尚未涵盖 Puppeteer 的全部功能集。

与 Chrome+CDP 实现相比,存在一些功能差距,包括对访问 cookie 存储、网络请求拦截、某些模拟功能和权限的支持。这些功能正在积极标准化,一旦可用,就会被集成。对于 Firefox,与 Firefox+CDP 实现相比,唯一缺少的功能是 cookie 访问。此外,WebDriver BiDi 已经提供了改进,包括对多进程 Firefox 的更好支持,这对于测试某些网站至关重要。有关完整支持的 API 集的更多信息,请参阅 Puppeteer 文档,并且随着 Gecko 中启用新的 WebDriver-BiDi 功能,我们将发布有关 Firefox 开发者体验博客 的详细信息。

尽管如此,我们认为 Puppeteer 中基于 WebDriver 的 Firefox 支持已经达到了足够高的质量水平,使其适用于许多实际的自动化场景。例如,在 Mozilla,我们已经成功地 移植 了我们用于 pdf.js 的 Puppeteer 测试,从 Firefox+CDP 移植到 Firefox+WebDriver BiDi。

Firefox 的 CDP 支持会消失吗?

我们目前还没有关于删除 CDP 支持的具体时间表。但是,维护多个协议不利于资源利用,我们预计 WebDriver BiDi 将成为 Firefox 远程自动化的未来。如果您在 Puppeteer 上下文之外使用 CDP 支持,我们很乐意听取您的意见(见下文),以便我们了解您的用例,并帮助您过渡到 WebDriver BiDi。

在哪里可以提供反馈?

对于在将 Puppeteer 测试移植到 BiDi 时遇到的任何问题,请在 Puppeteer 问题跟踪器 中打开问题,除非您可以验证错误是在 Firefox 实现中,在这种情况下,请 在 Bugzilla 上提交错误

如果您目前正在使用 Firefox 的 CDP,请加入 #webdriver matrix 频道,以便我们讨论您的用例和需求,并帮助您解决在将代码移植到 WebDriver BiDi 时遇到的任何问题。

更新:Puppeteer 团队发布了“Harness the Power of WebDriver BiDi: Chrome and Firefox Automation with Puppeteer”。

关于 James Graham

专注于维护健康的开放 Web 的软件工程师。Web 平台测试核心团队成员。

更多由 James Graham 撰写的文章…