启用跟踪日志¶
geckodriver 为不同受众提供不同级别的日志。默认情况下,最重要的日志条目会显示给所有人,其中包括 geckodriver 提供 WebDriver API 的端口,以及信息性警告、错误和致命异常。
不同的日志级别,按带宽升序排列:
fatal
保留用于 geckodriver 或 Firefox 无法恢复的异常情况。这通常意味着一个或两个进程都会退出。error
消息是程序代码中的错误,可以从中恢复。warn
显示更多信息性质的警告,不一定是 geckodriver 中的问题。例如,如果您使用旧的desiredCapabilities
/requiredCapabilities
对象而不是新的alwaysMatch
/firstMatch
结构,就会发生这种情况。info
(默认) 包含 geckodriver 绑定到的端口信息,以及上面列出的所有较低带宽级别的消息。config
还会显示在将alwaysMatch
功能与firstMatch
功能序列匹配后协商的功能。debug
保留用于编程时有用的信息。trace
,除了自身之外,还包括所有先前的级别。跟踪级别显示 geckodriver 收到的所有 HTTP 请求、发送到 Firefox 和从 Firefox 发送的远程协议数据包以及发送回客户端的响应。
换句话说,这意味着配置的级别将合并来自所有较低级别的条目,包括自身。如果您将日志级别设置为 error
,则将获得 fatal
和 error
的日志条目。类似地,对于 trace
,您将获得提供的所有日志。
为了帮助调试 geckodriver 或 Firefox 的问题,跟踪级别的输出对于理解正在发生的事情至关重要。这就是为什么我们在针对 geckodriver 提交错误时要求包含跟踪日志的原因。只有在非常特殊的情况下才不需要跟踪日志,因此您通常会发现,在我们对您的问题进行分类时,我们的第一个操作就是要求您包含一个。帮自己和我们一个忙,立即提供跟踪级别的日志。
要完全静默 geckodriver,您可以例如将所有输出重定向到追加到某些日志文件
% geckodriver >>geckodriver.log 2>>geckodriver.err.log
或某个黑洞
% geckodriver >/dev/null 2>&1
为 geckodriver 设置的日志级别会传播到 Firefox 中的 Marionette 日志记录器。Marionette 是 geckodriver 用于实现 WebDriver 的远程协议。这意味着启用 geckodriver 的跟踪日志也将隐式地为 Marionette 启用它们。
日志级别以不同的方式设置。可以使用 --log <LEVEL>
选项,其中 LEVEL
是上面列表中的日志级别之一,或者使用 -v
(用于调试)或 -vv
(用于跟踪)快捷方式。例如,以下命令将为 geckodriver 和 Marionette 启用跟踪日志
% geckodriver -vv
设置日志级别的第二种方法是通过功能。geckodriver 在 moz:firefoxOptions
中接受一个 Mozilla 特定的配置对象。此 JSON 对象在 README 中有进一步描述,可以保存 Firefox 特定的配置,例如使用哪个 Firefox 二进制文件、设置哪些其他首选项,当然还有使用哪个日志级别。
每个客户端都有自己的指定功能的方式,并且一些客户端包括用于提供浏览器特定配置的“帮助程序”。通常建议使用这些帮助程序而不是自己编码 JSON 对象,因为很难准确掌握细节,但是如果您选择这样做,它应该如下所示
{"moz:firefoxOptions": {"log": {"level": "trace"}}}
请注意,大多数已知的 WebDriver 客户端(例如 Selenium 项目提供的客户端)都没有公开查看日志的方法,除非您将日志输出重定向到特定文件(使用上面显示的方法)或让客户端“继承”geckodriver 的输出,例如通过将其 stdout 和 stderr 流重定向到它自己的流。值得注意的例外是 Python 和 Ruby 绑定,它们以一种非常简单有效的方式显示 geckodriver 日志。
请参阅下面的客户端特定文档,了解在您的语言中启用跟踪日志的最惯用方法。我们希望扩展此文档以涵盖人们与 geckodriver 一起使用的所有最知名的客户端。如果您发现您的语言丢失,请考虑 提交补丁。
C#¶
Selenium 的 C# 客户端 带有一个 FirefoxOptions
帮助程序,用于构建 moz:firefoxOptions
功能对象
FirefoxOptions options = new FirefoxOptions();
options.LogLevel = FirefoxDriverLogLevel.Trace;
IWebDriver driver = new FirefoxDriver(options);
日志输出定向到标准输出。
Java¶
Selenium 的 Java 客户端 也带有一个 org.openqa.selenium.firefox.FirefoxOptions
帮助程序,用于构建 moz:firefoxOptions
功能对象
FirefoxOptions options = new FirefoxOptions();
options.setLogLevel(FirefoxDriverLogLevel.TRACE);
WebDriver driver = new FirefoxDriver(options);
日志输出定向到标准输出。
Javascript (webdriver.io)¶
使用 Selenium 的 JavaScript 客户端,可以直接构造功能对象
import WebDriver from 'webdriver'
const driver = await WebDriver.newSession({
capabilities: {
browserName: 'firefox',
'moz:firefoxOptions': {
log: { level: 'trace' },
}
}
})
日志输出定向到标准输出,或者如果 geckodriver 作为 wdio 插件运行,则生成的日志是 wdio 日志系统的一部分。
Python¶
Selenium 的 Python 客户端 带有一个 selenium.webdriver.firefox.options.Options
帮助程序,可用于以编程方式构建 moz:firefoxOptions
功能对象
from selenium.webdriver import Firefox
from selenium.webdriver.firefox.options import Options
opts = Options()
opts.log.level = "trace"
driver = Firefox(options=opts)
日志输出存储在脚本当前工作目录中的名为 geckodriver.log 的文件中。
Ruby¶
Selenium 的 Ruby 客户端 带有一个 Options
帮助程序,用于生成正确的 moz:firefoxOptions
功能对象
Selenium::WebDriver.logger.level = :debug
opts = Selenium::WebDriver::Firefox::Options.new(log_level: :trace)
driver = Selenium::WebDriver.for :firefox, options: opts
日志输出定向到标准输出。