JavaScript
 Computer >> コンピューター >  >> プログラミング >> JavaScript

SeleniumでJavaScriptのコンソールエラーを取得・キャプチャする方法


Seleniumでは、ブラウザ上で発生したJavaScriptのエラーを自動的にキャプチャ(取得)できます。この種のエラーは、通常、開発者ツール(Developer tools)を開いた際に表示される「Console」タブで確認できるものです。エラーの発生原因は、ページ自体の機能的な不具合の場合もあれば、余分なログ出力が積み重なってパフォーマンス問題につながっているケースもあります。テスト自動化の中でこれらのエラーを検知できれば、リリース前の品質チェックに大きく役立ちます。

SeleniumでJavaScriptのコンソールエラーを取得・キャプチャする方法

JavaScriptエラーの取得方法

JavaScriptのエラーは、driverオブジェクトmanage()メソッドを組み合わせて処理できます。全体の流れは以下の4ステップです。

  1. driver.manage().logs()でログマネージャーを取得する
  2. getAvailableLogTypes()で取得可能なログタイプ(browser、driver、clientなど)を確認する
  3. get(LogType.BROWSER)でブラウザコンソールのログ(LogEntries)を取り出す
  4. filter(Level.ALL)ですべてのレベルのログエントリを抽出し、1件ずつ出力する

サンプルコード(Java)

以下は、意図的にJavaScriptエラーが発生するデモページ(the-internet.herokuapp.com/javascript_error)へアクセスし、ブラウザログを取得して標準出力に表示するサンプルです。

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import java.util.List;
import java.util.ArrayList;
import org.openqa.selenium.logging.LogEntries;
import org.openqa.selenium.logging.LogEntry;
import org.openqa.selenium.logging.LogType;
import java.util.logging.Level;
import java.util.Set;

public class JavascrptLogErs {
    public static void main(String[] args) {
        System.setProperty("webdriver.chrome.driver",
        "C:\\Users\\ghs6kor\\Desktop\\Java\\chromedriver.exe");
        WebDriver driver = new ChromeDriver();
        String u = "https://the−internet.herokuapp.com/javascript_error";
        driver.get(u);
        // ブラウザを最大化
        driver.manage().window().maximize();
        // 取得可能なログタイプを一覧表示
        Set<String> logtyp = driver.manage().logs().getAvailableLogTypes();
        for (String s : logtyp) {
            System.out.println(s);
        }
        // ブラウザログ(BROWSER)を取得してすべて出力
        LogEntries logEntries = driver.manage().logs().get(LogType.BROWSER);
        List<LogEntry> lg = logEntries.filter(Level.ALL);
        for (LogEntry logEntry : lg) {
            System.out.println(logEntry);
        }
        driver.quit();
    }
}

コードの解説

  • getAvailableLogTypes(): 現在のドライバーで取得できるログタイプの種類をSet<String>として返します。ここでは拡張for文で1件ずつ出力しています。
  • LogType.BROWSER: コンソールに出力されるJavaScriptのエラーや警告など、ブラウザ側のログを表します。ほかにLogType.DRIVER(WebDriver自身のログ)やLogType.CLIENTなども利用できます。
  • filter(Level.ALL): SEVERE・WARNING・INFOなど、すべてのログレベルを対象にフィルタリングします。致命的なエラーだけを確認したい場合はLevel.SEVEREを指定すれば絞り込みが可能です。
  • LogEntryの出力内容: 各エントリには、ログレベル・タイムスタンプ・発生元のURL・メッセージ(例:「Uncaught ReferenceError: nonExistentFunction is not defined」)などの情報が含まれます。

注意点:Selenium 4(W3Cモード)でのログ取得

ChromeDriver 75以降およびSelenium 4系ではW3Cモードがデフォルトになったため、環境によっては上記のコードだけではブラウザログが取得できない場合があります。その際は、Chromeの起動オプションでgoog:loggingPrefsケイパビリティを明示的に指定してください。

// 必要なimport: java.util.Map / java.util.HashMap /
// org.openqa.selenium.chrome.ChromeOptions

ChromeOptions options = new ChromeOptions();
Map<String, Object> prefs = new HashMap<>();
prefs.put("browser", "ALL");
options.setCapability("goog:loggingPrefs", prefs);
WebDriver driver = new ChromeDriver(options);

このように設定しておけば、W3CモードでもLogType.BROWSER経由でJavaScriptのエラーを確実に取得できます。テスト失敗時の原因切り分けや、コンソールエラーの有無をアサーションする仕組みづくりにもぜひ活用してください。

  1. PythonとSeleniumでJavaScriptを実行する方法【execute_script活用ガイド】

    Selenium WebDriver(Python版)では、JavaScriptを実行することができます。Document Object Model(DOM)は、JavaScriptを通じてページ上の要素とやり取りを行います。SeleniumでJavaScriptのコマンドを実行するには、execute_scriptメソッドを使用します。実行したいコマンドは、このメソッドの引数として渡します。ページを下方向にスクロールするような操作は、Seleniumの標準メソッドだけでは直接実行できない場合があります。こうした操作は、JavaScript Executorを使うことで実現できます。スクロール

  2. Discord起動時のJavaScriptエラーを解決する方法【Windows 10対応】

    Discordは、ゲーマーの間で最も広く利用されているユーザーフレンドリーなアプリケーションです。チャット機能やライブ配信機能でも知られていますが、他のアプリと同様にエラーに遭遇することもあります。多くのユーザーから、Discordの起動時に「Discord JavaScript error」や「A JavaScript error occurred in the main process(メインプロセスでJavaScriptエラーが発生しました)」というエラーが報告されています。毎回起動するたびにこのエラーが表示されるのは非常にストレスですよね。しかし心配はいりません!この記事を読んで、エラ