はじめに (対象読者・この記事でわかること)

この記事は、JavaでWebアプリケーションのE2E自動テストを書いているが「EdgeのWebDriverバージョンが合わずに起動失敗」に悩んでいる開発者向けです。
Selenium 4.11から追加された「Selenium Manager」機能を使うと、pom.xmlに1行追加するだけでEdgeのWebDriverを自動ダウンロード&キャッシュしてくれるようになりました。
記事を読み終えると、手動でmsedgedriver.exeをダウンロードしたりPATHを通したりする作業が一切不要になり、CI/CDパイプライン上でも「常に最新Edge」でのテストが安定して回せるようになります。

前提知識

この記事を読み進める上で、以下の知識があるとスムーズです。 - Java 11以降の基本的な文法とMaven(またはGradle)プロジェクトの作成方法 - Selenium WebDriverの基礎(WebDriverインタフェース、WebElementの操作) - JUnit 5で@Testアノテーションを使ったテストクラスの書き方

Selenium 4.11でWebDriver管理が楽になった理由

従来は、Edgeのメジャーバージョンが上がるたびに「Edgeのバージョン確認→対応するWebDriverダウンロード→PATHを通す」を手動で繰り返していました。
Selenium 4.11以降、公式に「Selenium Manager」というバイナリが組み込まれ、Javaバインディングから自動で「必要なバージョンのWebDriverを~/.cache/seleniumにキャッシュ&参照」してくれるようになりました。
つまり、ローカルでもCI上でも「Edgeのバージョンを意識せず」テストコードが走るようになったのです。

JavaプロジェクトでEdgeを自動起動するまでの実装手順

Java + Mavenプロジェクトを例に、EdgeのWebDriverを「手動ダウンロードなし」で起動する手順を解説します。

ステップ1:依存関係にSelenium 4.11以降を指定

pom.xmlに以下1行を追加するだけでOKです(2025年6月時点の最新は4.22.0)。

Xml
<dependency> <groupId>org.seleniumhq.selenium</groupId> <artifactId>selenium-java</artifactId> <version>4.22.0</version> <scope>test</scope> </dependency>

これだけでselenium-managerバイナリがtransitive依存として解決されます。
Gradleを使っている場合はimplementation 'org.seleniumhq.selenium:selenium-java:4.22.0'と同じです。

ステップ2:EdgeOptionsを使ってブラウザを起動

従来通りEdgeOptionsで起動するだけで、Selenium Managerが裏でmsedgedriverをキャッシュして実行してくれます。

Java
@Test void edgeCanLaunchWithoutManualDriver() { EdgeOptions options = new EdgeOptions(); options.addArguments("--headless=new"); // CI上では必須 WebDriver driver = new EdgeDriver(options); // ここで自動ダウンロードが走る driver.get("https://example.com"); assertThat(driver.getTitle()).contains("Example"); driver.quit(); }

初回実行時は~/.cache/seleniummsedgedriverがダウンロードされ、2回目以降はキャッシュが使われます。
Windows/Mac/Linuxすべてで同一のコードで動作します。

ハマった点:プロキシ環境だとSelenium Managerが失敗する

社内NWなどプロキシ環境でCIを回すと、selenium-managerがHTTPSアクセスできず「driver unavailable」で失敗することがあります。

解決策:プロキシ設定をJVM引数に渡す

Mavenのmaven-failsafe-plugin(またはsurefire-plugin)でプロキシを指定します。

Xml
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-failsafe-plugin</artifactId> <configuration> <systemPropertyVariables> <https.proxyHost>proxy.example.com</https.proxyHost> <https.proxyPort>8080</https.proxyPort> <https.nonProxyHosts>localhost|127.0.0.1</https.nonProxyHosts> </systemPropertyVariables> </configuration> </plugin>

これでSelenium Managerもプロキシを通ってEdgeのWebDriverをダウンロードできるため、CI上でもエラーが解消します。

まとめ

本記事では、Selenium 4.11以降のSelenium Manager機能を使い「JavaからEdgeのWebDriverを自動ダウンロード」する方法を解説しました。

  • pom.xmlにselenium-java:4.22.0を1行追加するだけで準備完了
  • EdgeDriverインスタンス生成時に裏でmsedgedriverが自動キャッシュ
  • プロキシ環境ではJVM引数でhttps.proxyHost/Portを指定

この記事を通して、Edgeのバージョンアップ毎のWebDriver手動管理が不要になり、ローカルでもGitHub ActionsなどCI上でも「常に最新Edge」で安定したE2Eテストが回せるようになります。
次回は「GitHub Actions + Selenium Manager + Testcontainers」でマトリクステストを回す方法を紹介予定です。

参考資料