記錄 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])