测试非常重要。在向用户交付您构建的内容(无论是整个网站或应用,还是新功能)之前,请务必先检查其能否按预期运行,这是关键一步。不过,仍有大量测试需要手动完成,同事或测试工程师需要检查新功能并报告问题。
虽然这种手动测试可以发现某些类别的问题,但可能会遗漏更多问题。进行测试的人员可能会错过极端情况,或者完全无法测试应用中的特定历程。他们也没有您在编写代码时掌握的所有信息,不知道您添加代码来防范的具体问题。随着时间的推移和新功能的添加,他们是否会回过头来重新测试之前所有正常运行的功能,以确保这些更改不会破坏它们?
因此,Chrome 团队非常重视自动化测试。通过使用可靠地反复测试功能是否会发生故障的测试套件,您可以确保现在和未来开发过程中的每个小细节都经过了测试。作为功能开发者的知识封装在测试中。
不过,我们知道自动化测试可能很有挑战性。因此,Chrome 团队提供了以下工具和指南,以便您尽可能顺利地完成迁移。
木偶操作师
Puppeteer 是一个 Node.js 库。借助该 API,您可以使用简单易用的高级 API 自动执行 Chrome、Chromium 和 Firefox 操作。
虽然此 API 最初基于 Chrome DevTools 协议,但我们的目标是在今年年底之前将新的高级 WebDriver BiDi 协议作为 Puppeteer 的基础。WebDriver BiDi 由所有主要浏览器供应商共同打造,可简化许多自动化用例,并支持许多新用例,并且具有跨浏览器兼容性。
但您无需等待。目前,Puppeteer 的 API 已经支持许多自动化用例,而 WebDriver BiDi 只会进一步提升这些用例的效果。从测试到可视化抓取和流程自动化,您可以使用网页互动、请求拦截和屏幕截图等功能执行许多操作。您甚至可以使用它通过 WebGPU 和 WebGL 在云端测试 Web AI 模型。
WebdriverIO(一个完整的浏览器测试框架)和 Privacy Sandbox Analysis Tool 等工具也使用 Puppeteer,可让您更好地了解网站上的 Cookie 和用户数据使用情况。
无头 Chrome
如果您曾使用 Puppeteer 自动化 Chrome,可能发现在运行测试时没有显示浏览器窗口。默认情况下,Puppeteer 会在无头模式下启动 Chrome。这意味着,在自动化操作运行期间,系统不会显示实际的浏览器窗口。
但您知道吗,Chrome 的无头模式不仅仅是没有窗口的 Chrome,实际上是一个完全独立维护的 Chrome 版本。长久以来,这导致了混乱,并且难以跟踪 bug 和问题。
从 Chrome 112 开始,我们引入了新的无头模式,该模式现在基于与常规 Chrome 相同的代码库。这不仅减少了之前的混淆,还带来了以前无法实现的功能,例如在自动化过程中使用扩展程序。
从版本 22 开始,Puppeteer 一直将这种新的无头模式用作默认模式。如果您通过其他自动化解决方案使用 Chrome 无头版,则可以使用 --headless=new
命令行开关强制启用新的无头模式。
虽然 Chrome 的新无头模式功能更强大,但不如旧版无头模式轻量。如果您非常缺少资源,或者不需要 Chrome 的所有功能,可以将旧版无头模式用作 chrome-headless-shell
。
Chrome for Testing
在测试时,您需要对测试环境(操作系统、浏览器和浏览器版本)进行精细控制。但由于 Chrome 会自动更新,因此这可能很难做到。
因此,我们创建了 Chrome 测试版,这是一个不自动更新的 Chrome 版本,与每个 Chrome 版本一起发布,适用于每种主要操作系统,可通过版本归档文件访问。这样,您无需进行太多操作,即可针对特定版本的 Chrome 运行自动化工作流。
您可以通过 Chrome for Testing 可用性信息中心、JSON API 或 Puppeteer 命令行实用程序访问 Chrome for Testing 二进制文件。
Puppeteer、Chrome 更新后的无头模式和 Chrome 测试版只是我们团队目前为您尽可能顺利地实现浏览器自动化和运行测试所做的一部分工作。相关工具(例如 DevTools 录制器)可帮助您创建测试:在 Chrome 中录制用户流程,并在 Puppeteer 中重放该流程。
在 web.dev 上了解测试
本文介绍的工具将有助于您改进自动化测试。 不过,如果您刚刚开始接触,可能会觉得需要了解和学习的内容很多。因此,我们制作了全新的 10 个模块课程 - 在 web.dev 上学习测试。这门深入的课程涵盖了测试的核心概念、测试的运行位置和方式、测试类型以及实际要测试的内容。这是一个很好的起点,可帮助您开启测试之旅。掌握了基本知识后,您可以随时前往我们的“测试自动化”集合,深入了解更具体的测试问题并获取实用提示。