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

JavaScriptエラーの取得方法
JavaScriptのエラーは、driverオブジェクトとmanage()メソッドを組み合わせて処理できます。全体の流れは以下の4ステップです。
driver.manage().logs()でログマネージャーを取得するgetAvailableLogTypes()で取得可能なログタイプ(browser、driver、clientなど)を確認するget(LogType.BROWSER)でブラウザコンソールのログ(LogEntries)を取り出す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のエラーを確実に取得できます。テスト失敗時の原因切り分けや、コンソールエラーの有無をアサーションする仕組みづくりにもぜひ活用してください。
-
PythonとSeleniumでJavaScriptを実行する方法【execute_script活用ガイド】
Selenium WebDriver(Python版)では、JavaScriptを実行することができます。Document Object Model(DOM)は、JavaScriptを通じてページ上の要素とやり取りを行います。SeleniumでJavaScriptのコマンドを実行するには、execute_scriptメソッドを使用します。実行したいコマンドは、このメソッドの引数として渡します。ページを下方向にスクロールするような操作は、Seleniumの標準メソッドだけでは直接実行できない場合があります。こうした操作は、JavaScript Executorを使うことで実現できます。スクロール
-
Discord起動時のJavaScriptエラーを解決する方法【Windows 10対応】
Discordは、ゲーマーの間で最も広く利用されているユーザーフレンドリーなアプリケーションです。チャット機能やライブ配信機能でも知られていますが、他のアプリと同様にエラーに遭遇することもあります。多くのユーザーから、Discordの起動時に「Discord JavaScript error」や「A JavaScript error occurred in the main process(メインプロセスでJavaScriptエラーが発生しました)」というエラーが報告されています。毎回起動するたびにこのエラーが表示されるのは非常にストレスですよね。しかし心配はいりません!この記事を読んで、エラ