调试

重定向 Gecko 输出

调试 Marionette 以及一般 chrome 代码最常见的方法是使用 dump() 将字符串打印到标准输出。在 Firefox 中,此日志输出通常最终会出现在当前工作目录中的 gecko.log 文件中。在 Fennec 中,可以使用 adb logcat 检查它。

mach marionette-test 接受一个 --gecko-log 选项,允许您重定向此输出流。如果您想将测试工具输出与浏览器标准输出“合并”,这将非常方便。根据 Unix 约定,您可以使用 - (破折号) 让 Firefox 将其日志写入标准输出而不是文件。

% ./mach marionette-test --gecko-log -

通常将其与提高 Marionette 日志级别的选项结合使用。

% ./mach test --gecko-log - -vv TEST

单个 -v 启用调试日志记录,双 -vv 启用跟踪日志记录。

此调试技术与在 Python 客户端中使用 pdb 或下面描述的 JS 远程调试器结合使用时,可以特别有效。

JavaScript 调试器

您可以使用 --jsdebugger 标志将 浏览器工具箱 JavaScript 调试器附加到 Marionette 服务器。这使您可以检查和设置 Gecko chrome 代码中的断点,这比使用 dump()console.log() 是一种更强大的调试技术。

要为 Mn 测试自动打开 JS 调试器

% ./mach marionette-test --jsdebugger

它会在您开始设置断点时提示您。它还会在每次测试之间提示您。

您还可以在 chrome 代码中的任何位置使用 debugger; 语句添加断点。在此示例中,每当调用 WebDriver:GetPageSource 命令时,都会添加断点。

    GeckoDriver.prototype.getPageSource = async function() {
      debugger;
      
    }

要在测试运行开始或测试之间收到提示,您可以将 marionette.debugging.clicktostart 首选项设置为 true,方法如下

% ./mach marionette-test --setpref='marionette.debugging.clicktostart=true' --jsdebugger

作为参考,以下是启用 Marionette chrome 调试器的首选项列表。当将 --jsdebugger 传递给 mach 时,所有这些都隐式设置。在非官方版本中(使用 ./mach build 构建时为默认值),您会发现 chrome 调试器不会提示连接并且允许远程连接。

  • devtools.browsertoolbox.panel -> jsdebugger

    默认情况下选择调试器面板。

  • devtools.chrome.enabled → true

    启用 chrome 代码的调试。

  • devtools.debugger.prompt-connection → false

    控制远程连接提示。请注意,这会自动将您的 Firefox 实例公开到 localhost。

  • devtools.debugger.remote-enabled → true

    允许远程调试器连接,这对于调试 chrome 代码是必需的。