测试 geckodriver

我们通过几种不同的方式验证和测试 geckodriver。由于它是 WebDriver Web 标准的实现,因此我们通过 Web 平台测试 (WPT) 计划与其他浏览器供应商共享一组一致性测试。这使我们能够确保不同浏览器不同 WebDriver 实现之间的 Web 兼容性。

除了 WPT 测试之外,geckodriver 和 webdriver 还有单元测试。这些是用 Rust 编写的,但您必须明确告诉 mach 构建这些测试,方法是在您的 mozconfig 中添加以下行

ac_add_options --enable-rust-tests

然后,可以使用特定源文件夹中 cargotest 子命令运行测试

% cd testing/geckodriver/src
% cargo test

要运行更广泛的 WPT 测试,您可以使用 mach,但首先请确保您已构建 Firefox

% ./mach build
% ./mach wpt testing/web-platform/tests/webdriver

由于这些是功能集成测试,并且会零星地弹出 Firefox 窗口,因此一个有用的技巧是在运行它们时使用 Firefox 的 无头模式 来抑制窗口

% ./mach wpt --headless testing/web-platform/tests/webdriver

--headless 标志等效于设置 MOZ_HEADLESS 输出变量。除了 MOZ_HEADLESS 之外,还有 MOZ_HEADLESS_WIDTHMOZ_HEADLESS_HEIGHT 用于控制虚拟无操作显示的尺寸。这类似于使用您可能从 X 窗口系统了解到的 Xvfb(1),但它还具有在 macOS 和 Windows 上也起作用的额外优势。

在您开始开发 geckodriver 和 Marionette 时,您会逐渐了解我们对 跟踪级别日志 的喜爱。它们为我们提供了来自客户端的输入(在 WPT 的情况下,来自测试使用自定义 WebDriver 客户端)的 HTTP 请求,geckodriver 对 Marionette 协议 进行的转换,Marionette 的日志输出,它发回给 geckodriver 的响应,以及最终发回给客户端的输出或 HTTP 响应。

可以通过将 -vv 标志传递给通过 WPT 的 geckodriver 来显示 跟踪级别日志

% ./mach wpt --webdriver-arg=-vv testing/web-platform/tests/webdriver