记录 Selenium 命令
启用日志记录是一种获取额外信息的重要方式,这些信息可能有助于您确定可能遇到问题的原因。
获取记录器
Java 日志通常是按类创建的。您可以使用默认记录器来处理所有记录器。要过滤掉特定类,请参阅过滤
获取根记录器
Logger logger = Logger.getLogger("");
Java 日志记录并非完全简单,如果您只是想轻松查看重要的 Selenium 日志,请查看Selenium Logger 项目
Python 日志通常是按模块创建的。您可以通过引用顶级模块来匹配所有子模块。因此,要使用 selenium 模块中的所有记录器,您可以这样做
logger = logging.getLogger('selenium')
.NET 记录器使用静态类进行管理,因此对日志记录的所有访问都只需引用 OpenQA.Selenium.Internal.Logging
命名空间中的 Log
即可。
如果您想在所有类中看到尽可能多的调试信息,您可以通过设置 $DEBUG = true
在 Ruby 中全局启用调试。
为了进行更精细的控制,Ruby Selenium 创建了自己的 Logger 类来包装默认的 Logger
类。此实现提供了一些有趣的附加功能。直接从 Selenium::WebDriver
模块的 #logger
类方法获取记录器
logger = Selenium::WebDriver.logger
const logging = require('selenium-webdriver/lib/logging')
logger = logging.getLogger('webdriver')
内容帮助
记录器级别
记录器级别有助于根据日志的严重程度过滤日志。
Java 有 7 个记录器级别:SEVERE
、WARNING
、INFO
、CONFIG
、FINE
、FINER
和 FINEST
。默认值为 INFO
。
您必须更改根记录器上记录器的级别和处理程序的级别
logger.setLevel(Level.FINE);
Arrays.stream(logger.getHandlers()).forEach(handler -> {
handler.setLevel(Level.FINE);
});
Python 有 6 个记录器级别:CRITICAL
、ERROR
、WARNING
、INFO
、DEBUG
和 NOTSET
。默认值为 WARNING
要更改记录器的级别
logger.setLevel(logging.DEBUG)
但是,当您使用 PyTest 时,事情会变得复杂。默认情况下,PyTest 会隐藏日志,除非测试失败。您需要设置 3 项才能使 PyTest 在通过测试时显示日志。
要始终使用 PyTest 输出日志,您需要使用其他参数运行。首先,-s
防止 PyTest 捕获控制台。其次,-p no:logging
,这使您可以覆盖默认的 PyTest 日志设置,以便可以显示日志,而无论是否存在错误。
因此,您需要在 IDE 中设置这些标志,或在命令行上运行 PyTest,如
pytest -s -p no:logging
最后,由于您在上面的参数中关闭了日志记录,因此现在需要添加配置以重新打开它
logging.basicConfig(level=logging.WARN)
.NET 有 6 个记录器级别:Error
、Warn
、Info
、Debug
、Trace
和 None
。默认级别为 Info
。
要更改记录器的级别
Log.SetLevel(LogEventLevel.Trace);
Ruby 记录器有 5 个记录器级别::debug
、:info
、:warn
、:error
、:fatal
。默认值为 :info
。
要更改记录器的级别
logger.level = :debug
JavaScript 有 9 个记录器级别:OFF
、SEVERE
、WARNING
、INFO
、DEBUG
、FINE
、FINER
、FINEST
、ALL
。默认值为 OFF
。
要更改记录器的级别
logger.setLevel(logging.Level.INFO)
内容帮助
可操作项
如果某些内容是用户需要采取措施的,则会将其记录为警告。这通常用于弃用。由于各种原因,Selenium 项目不遵循标准的语义版本控制实践。我们的政策是将事物标记为已弃用 3 个版本,然后将其删除,因此弃用可能会记录为警告。
Java 在记录器级别 WARN
记录可操作的内容
示例
May 08, 2023 9:23:38 PM dev.selenium.troubleshooting.LoggingTest logging
WARNING: this is a warning
Python 在记录器级别 WARNING
记录可操作的内容。有关弃用的详细信息将在此级别记录。
示例
WARNING selenium:test_logging.py:23 this is a warning
.NET 在记录器级别 Warn
记录可操作的内容。
示例
11:04:40.986 WARN LoggingTest: this is a warning
Ruby 在记录器级别 :warn
记录可操作的内容。有关弃用的详细信息将在此级别记录。
例如
2023-05-08 20:53:13 WARN Selenium [:example_id] this is a warning
由于这些项目可能会让人感到烦恼,我们提供了一种简单的方法来关闭它们,请参阅下面的过滤部分。
内容帮助
内容帮助
有用信息
这是 Selenium 记录用户应注意但无需采取任何措施的内容的默认级别。这可能引用一个新方法或指导用户了解有关某些内容的更多信息
Java 在记录器级别 INFO
记录有用的信息
示例
May 08, 2023 9:23:38 PM dev.selenium.troubleshooting.LoggingTest logging
INFO: this is useful information
Python 在记录器级别 INFO
记录有用的信息
示例
INFO selenium:test_logging.py:22 this is useful information
.NET 在记录器级别 Info
记录有用的信息。
示例
11:04:40.986 INFO LoggingTest: this is useful information
Ruby 在记录器级别 :info
记录有用的信息。
示例
2023-05-08 20:53:13 INFO Selenium [:example_id] this is useful information
在级别 INFO
记录有用的信息
内容帮助
调试详情
调试日志级别用于诊断问题和排除故障可能需要的信息。
Java 在记录器级别 FINE
记录大多数调试内容
示例
May 08, 2023 9:23:38 PM dev.selenium.troubleshooting.LoggingTest logging
FINE: this is detailed debug information
Python 在记录器级别 DEBUG
记录调试详细信息
示例
DEBUG selenium:test_logging.py:24 this is detailed debug information
.NET 在记录器级别 Debug
记录大多数调试内容。
示例
11:04:40.986 DEBUG LoggingTest: this is detailed debug information
Ruby 仅提供一个调试级别,因此所有详细信息都在记录器级别 :debug
。
示例
2023-05-08 20:53:13 DEBUG Selenium [:example_id] this is detailed debug information
在级别 FINER
和 FINEST
记录调试详细信息
内容帮助
记录器输出
日志可以显示在控制台中或存储在文件中。不同的语言具有不同的默认值。
默认情况下,所有日志都发送到 System.err
。要将输出定向到文件,您需要添加处理程序
Handler handler = new FileHandler("selenium.xml");
logger.addHandler(handler);
默认情况下,所有日志都发送到 sys.stderr
。要将输出定向到其他位置,您需要使用 StreamHandler
或 FileHandler
添加一个处理程序
handler = logging.FileHandler(log_path)
logger.addHandler(handler)
默认情况下,所有日志都发送到 System.Console.Error
输出。要将输出定向到其他位置,您需要使用 FileLogHandler
添加一个处理程序
Log.Handlers.Add(new FileLogHandler(filePath));
JavaScript 当前不支持将输出发送到文件。
要将日志发送到控制台输出
logging.installConsoleHandler()
内容帮助
记录器过滤
Java 日志记录在每个类级别进行管理,因此不要使用根记录器 (Logger.getLogger("")
),而是在每个类的基础上设置要使用的级别
Logger.getLogger(RemoteWebDriver.class.getName()).setLevel(Level.FINEST);
Logger.getLogger(SeleniumManager.class.getName()).setLevel(Level.SEVERE);
logging.getLogger('selenium.webdriver.remote').setLevel(logging.WARN)
logging.getLogger('selenium.webdriver.common').setLevel(logging.DEBUG)
.NET 日志记录在每个类级别进行管理,在每个类的基础上设置要使用的级别
Log.SetLevel(typeof(RemoteWebDriver), LogEventLevel.Debug);
Log.SetLevel(typeof(SeleniumManager), LogEventLevel.Info);
Ruby 的记录器允许您根据日志消息的 ID 选择加入(“allow”)或选择退出(“ignore”)日志消息。Selenium 记录的所有内容都包含一个 ID。您还可以使用 :deprecations
打开或关闭所有弃用通知。
这些方法接受一个或多个符号或符号数组
logger.ignore(:jwp_caps, :logger_info)
或
logger.allow(%i[selenium_manager example_id])