Selenium コマンドのロギング
ロギングを有効にすることは、問題の原因を特定するのに役立つ追加情報を得るための貴重な方法です。
ロガーの取得
Java のログは通常、クラスごとに作成されます。すべてのロガーを操作するには、デフォルトのロガーを使用できます。特定のクラスをフィルタリングするには、「フィルタリング」を参照してください。
ルートロガーを取得する
Logger logger = Logger.getLogger("");
Java のロギングは必ずしも簡単ではありません。重要な Selenium ログを簡単に確認する方法を探している場合は、Selenium Logger プロジェクトをご覧ください。
Python のログは通常、モジュールごとに作成されます。トップレベルモジュールを参照することで、すべてのサブモジュールを一致させることができます。したがって、selenium モジュール内のすべてのロガーを操作するには、このようにします。
logger = logging.getLogger('selenium')
.NET ロガーは静的クラスで管理されているため、ロギングへのすべてのアクセスは、OpenQA.Selenium.Internal.Logging 名前空間から Log を参照するだけで管理されます。
すべてのクラスで可能な限り多くのデバッグを表示したい場合は、Ruby でグローバルに $DEBUG = true
を設定することでデバッグをオンにできます。
よりきめ細かい制御のために、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 はテストが失敗しない限りロギングを非表示にします。PyTest に合格したテストのログを表示するには、3 つの設定が必要です。
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 はデバッグ用に 1 つのレベルのみを提供するため、すべての詳細はロガーレベル — :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));
デフォルトでは、ログは stdout
のコンソールに送信されます。
ログをファイルに保存するには
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);
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 に基づいて、ログメッセージをオプトイン(「許可」)またはオプトアウト(「無視」)できます。Selenium がログに記録するすべてのものには ID が含まれています。:deprecations
を使用して、すべての非推奨通知をオンまたはオフにすることもできます。
これらのメソッドは、1 つ以上のシンボルまたはシンボルの配列を受け入れます。
logger.ignore(:jwp_caps, :logger_info)
または
logger.allow(%i[selenium_manager example_id])