在 Safari 和 Webkit 上测试有什么区别?

What is the difference between testing on Safari vs Webkit?

我正在考虑使用 Playwright 编写一些 E2E 测试。我可以看到该库允许针对 Chromium、Firefox 和 Webkit 进行 运行 测试。我的理解是 Webkit 是 Safari 的底层引擎,而 Chromium 是 Chrome(以及其他浏览器)的基础。

在针对 Webkit/Chromium 进行测试时,它与针对使用底层引擎的面向用户的浏览器进行测试有多接近?我想会有一些用户可以 运行 在使用 Safari 时遇到的怪癖,而当 运行 在 Webkit 上测试时不会被捕获。

谢谢

常用浏览器,如 Google Chrome,Apple Safari 嵌入了渲染引擎(Chromium、WebKit)并在它们之上添加内容。特别是,他们添加了专有媒体编解码器、注入浏览器扩展等。他们还添加了书签同步等周边接口。但他们重用了底层网络平台实现。

Chromium 是 Google Chrome、Opera、Microsoft Edge 和其他浏览器使用的开源 Web 平台实现。它实现 Web 规范、呈现内容、与网络一起工作等。Playwright 使用库存 Chromium 构建,可以通过 Playwright API 自动进行 e2e 测试。

对于 Google Chrome 事情很简单:Chromium 是一个安全的测试目标,模数专有媒体编解码器和 DRM。您可以将 Playwright 指向 stock Chrome Canary 或 Edge Canary 以使用专有媒体编解码器。

WebKit

WebKit 是 Apple Safari 和 Epiphany 使用的开源网络平台实现。截至 2020 年 6 月,Playwright 提供了一个 WebKit 构建,可以使用 Playwright API 自动进行 e2e 测试。 Playwright WebKit 可在所有平台(macOS、Linux、Windows)上以无头和有头模式运行。

当 WebKit 运行s 在 macOS 上时,它是测试 Safari 的安全目标。 Linux 和 Windows 上的 WebKit 在以下方面与 Apple Safari 不同:它使用非 macOS 网络堆栈,使用非 Core Animation 来合成场景并生成图像光栅。这意味着 Linux 和 Windows 上的屏幕截图不会与 macOS 上的屏幕截图完全匹配。在网络平台方面,相同的 WebKit 代码将布局页面和 运行 JavaScript——它将与 WebKit 在 Safari 中的工作方式相匹配。

总而言之,我们认为 Playwright 提供的浏览器是您可以进行端到端测试的最佳浏览器。 运行 Linux CI 上的 WebKit 将使用与 macOS 不同的合成管道,但它可用于在支持 WebKit 的浏览器中对 Web 应用程序进行端到端测试。