Chrome for Testing:可靠下载,实现浏览器自动化

马蒂亚斯·拜恩斯
马蒂亚斯·拜恩斯

今天,我们非常高兴地宣布推出 Chrome for Testing,这是一个全新的 Chrome 版本,专门用于 Web 应用测试和自动化用例。本文介绍了 Chrome 团队认为有必要采用这种做法的原因,并通过具体示例说明了 Chrome for Testing 可能会使开发者受益。

背景

不管是手动还是自动进行,浏览器测试都是打造优质网络体验的重要一环。同时,众所周知,设置足够的浏览器测试环境并非易事,因此一直 有人表示这是顶级 Web 开发者的痛点。今天,我们宣布一项变化,这项变更有望缓解这一痛点。

自动更新:对用户来说非常好,对开发者来说会很麻烦

Chrome 最值得关注的功能之一就是自动更新功能。用户很高兴得知自己运行的是最新且安全的浏览器版本,并且该版本始终包含最新的网络平台功能、浏览器功能和问题修复。

不过,作为运行一系列端到端测试的开发者,您可能会有完全不同的观点:

  • 您需要反复运行测试时获得一致且可重现的结果,但是,如果浏览器可执行文件或二进制文件决定在两次运行之间自行更新,就可能会出现这样的情况。
  • 您想固定特定的浏览器版本,并将该版本号检查到源代码库中,这样您就可以签出旧的提交内容和分支,并从该时间点开始针对浏览器二进制文件重新运行测试。

使用自动更新的浏览器二进制文件,不可能做到这一点。因此,您可能不希望使用常规安装的 Chrome 进行自动测试。这是对常规浏览器用户有益与对开发者进行自动化测试有益的根本不一致。

带版本号的浏览器二进制文件

如果不考虑自动更新,您可能也已发现很难找到特定版本的 Chrome 二进制文件。Google 会刻意不提供带版本版的 Chrome 下载内容,因为用户不应该关心版本号,而应始终尽快将其更新到最新版本。这对用户很有帮助,但对于需要在旧版 Chrome 中重现 bug 报告的开发者来说,会更难。

此问题的具体示例是当您想要使用 ChromeDriver 实现浏览器自动化时。您不仅需要以某种方式下载 Chrome 二进制文件,还需要具有相应版本的 ChromeDriver 二进制文件,以确保这两个二进制文件是兼容的。

由于没有找到可解决这些问题的好方法,我们知道许多开发者会改为下载 Chromium(而非 Chrome)二进制文件,不过这种方法也存在一些缺陷。首先,这些 Chromium 二进制文件并非在所有平台上都能可靠地提供。其次,它们的构建和发布独立于 Chrome 发布流程,因此无法将其版本映射回面向用户的真实 Chrome 版本。再次,Chromium 不同于 Chrome。

解决方案:Chrome for Testing

Chrome for Testing 是专为测试用例打造的一款专用 Chrome 版本,旨在解决这些问题。它不含自动更新功能,已集成到 Chrome 的发布流程中,适用于所有 Chrome 版本。尽可能接近常规 Chrome 的版本化二进制文件,而不会对测试用例产生负面影响。

为了开发 Chrome for Testing,我们对 Chromium 和 Chrome 代码库进行了更改,并设置了基础架构,以便构建这些二进制文件并将其上传到公开发布的存储分区,与所有渠道(稳定版、Beta 版、开发版和 Canary 版)的 Chrome 发布流程保持同步。

Chrome for Testing 的基础架构在 Chrome 自身之外发现了一些有趣的机会。例如,我们之前提到的查找匹配的 Chrome 和 ChromeDriver 二进制文件的困难可以通过将 ChromeDriver 发布流程集成到 Chrome for Testing 基础架构中来彻底消除。除了解决这一面向用户的痛点之外,这还可以使 ChromeDriver 版本与 Chrome 的版本保持一致,并免去手动 ChromeDriver 发布流程。

如何获取 Chrome for Testing 二进制文件?

要下载适用于您平台的 Chrome for Testing 二进制文件,最简单的方法是使用我们的 @puppeteer/browsers 命令行实用程序(可通过 npm 下载)。下面是一些示例:

# Download the latest available Chrome for Testing binary corresponding to the Stable channel.
npx @puppeteer/browsers install chrome@stable

# Download a specific Chrome for Testing version.
npx @puppeteer/browsers install chrome@116.0.5793.0

# Download the latest available ChromeDriver version corresponding to the Canary channel.
npx @puppeteer/browsers install chromedriver@canary

# Download a specific ChromeDriver version.
npx @puppeteer/browsers install chromedriver@116.0.5793.0

如果您希望构建自己的自动脚本来下载这些二进制文件,那么我们也提供了可以满足您要求的功能。我们提供 JSON API 端点,其中包含每个 Chrome 发布版本(稳定版、Beta 版、开发者版、Canary 版)的最新可用版本。要快速了解最新状态,请参阅 Chrome for Testing 可用性信息中心