記錄 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])
上次修改時間:2024 年 1 月 24 日:[dotnet] 新增疑難排解記錄文件 (#1559) (50f38369ace)