Selenium コマンドのロギング

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クラスメソッドからロガーを直接取得します。

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 はテストが失敗しない限りロギングを非表示にします。PyTest に合格したテストのログを表示するには、3 つの設定が必要です。

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 はデバッグ用に 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 のコンソールに送信されます。
ログをファイルに保存するには

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 に基づいて、ログメッセージをオプトイン(「許可」)またはオプトアウト(「無視」)できます。Selenium がログに記録するすべてのものには ID が含まれています。:deprecations を使用して、すべての非推奨通知をオンまたはオフにすることもできます。

これらのメソッドは、1 つ以上のシンボルまたはシンボルの配列を受け入れます。

Selenium v4.10

    logger.ignore(:jwp_caps, :logger_info)

または

Selenium v4.10

    logger.allow(%i[selenium_manager example_id])