记录 Selenium 命令

获取有关 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 类方法获取记录器

Selenium v4.10

    logger = Selenium::WebDriver.logger
const logging = require('selenium-webdriver/lib/logging')
logger = logging.getLogger('webdriver')

记录器级别

记录器级别有助于根据日志的严重程度过滤日志。

Java 有 7 个记录器级别:SEVEREWARNINGINFOCONFIGFINEFINERFINEST。默认值为 INFO

您必须更改根记录器上记录器的级别和处理程序的级别

        logger.setLevel(Level.FINE);
        Arrays.stream(logger.getHandlers()).forEach(handler -> {
            handler.setLevel(Level.FINE);
        });

Python 有 6 个记录器级别:CRITICALERRORWARNINGINFODEBUGNOTSET。默认值为 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 个记录器级别:ErrorWarnInfoDebugTraceNone。默认级别为 Info

要更改记录器的级别

            Log.SetLevel(LogEventLevel.Trace);

Ruby 记录器有 5 个记录器级别::debug:info:warn:error:fatal。默认值为 :info

要更改记录器的级别

Selenium v4.10

    logger.level = :debug

JavaScript 有 9 个记录器级别:OFFSEVEREWARNINGINFODEBUGFINEFINERFINESTALL。默认值为 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 

在级别 FINERFINEST 记录调试详细信息

记录器输出

日志可以显示在控制台中或存储在文件中。不同的语言具有不同的默认值。

默认情况下,所有日志都发送到 System.err。要将输出定向到文件,您需要添加处理程序

        Handler handler = new FileHandler("selenium.xml");
        logger.addHandler(handler);

默认情况下,所有日志都发送到 sys.stderr。要将输出定向到其他位置,您需要使用 StreamHandlerFileHandler 添加一个处理程序

    handler = logging.FileHandler(log_path)
    logger.addHandler(handler)

默认情况下,所有日志都发送到 System.Console.Error 输出。要将输出定向到其他位置,您需要使用 FileLogHandler 添加一个处理程序

            Log.Handlers.Add(new FileLogHandler(filePath));

默认情况下,日志将以 stdout 形式发送到控制台。
要将日志存储在文件中

Selenium v4.10

    logger.output = file_name

JavaScript 当前不支持将输出发送到文件。

要将日志发送到控制台输出

logging.installConsoleHandler()

记录器过滤

Java 日志记录在每个类级别进行管理,因此不要使用根记录器 (Logger.getLogger("")),而是在每个类的基础上设置要使用的级别

        Logger.getLogger(RemoteWebDriver.class.getName()).setLevel(Level.FINEST);
        Logger.getLogger(SeleniumManager.class.getName()).setLevel(Level.SEVERE);
由于日志记录由模块管理,因此您可以为不同的模块指定不同的级别,而不是仅使用“selenium”
    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 打开或关闭所有弃用通知。

这些方法接受一个或多个符号或符号数组

Selenium v4.10

    logger.ignore(:jwp_caps, :logger_info)

Selenium v4.10

    logger.allow(%i[selenium_manager example_id])