调试¶
重定向 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 代码是必需的。