Selenium 4.5.0 以降で Java 11+ HTTP クライアントを使用する

Selenium 4.5.0 以降から Java 11+ HttpClient がサポートされるようになったことをお知らせします。

Selenium で使用されている現在の HTTP クライアント

Selenium は、複数の目的で HTTP クライアントと関連する WebSocket クライアントを使用しています。

  • WebDriver にコマンドを送信するため
  • Selenium クライアントライブラリから Grid にコマンドを送信するため
  • さまざまな Grid コンポーネントが Grid モードに応じて相互に通信するため
  • ChromeDevTools プロトコルおよび BiDi プロトコルセッションを作成するため

現在、Selenium は AsyncHttpClient を使用しています。AsyncHttpClient は Netty の上に構築されたオープンソースライブラリです。HTTP リクエストとレスポンスを非同期で実行できます。さらに、WebSocket サポートも提供します。したがって、適切な選択です。

Selenium が Java 11+ HTTP クライアントに移行したい理由

AsyncHttpClient は必要な機能を提供しますが、オープンソースプロジェクトは 2021 年 6 月以降、積極的にメンテナンスされていません。これは、Java 11+ が組み込みの HTTP および WebSocket クライアントを提供しているという事実と一致しています。Selenium はこれを利用して AsyncHttpClient を置き換えることができます。

現在、Selenium Java は Java 8 をサポートしています。Selenium は、サポートされる最小バージョンを Java 11 にアップグレードする計画があります。ただし、これはかなりの労力を要します。ユーザーエクスペリエンスを損なわないようにするために、メジャーリリースとそれに伴う発表と連携させることが重要です。

Selenium サーバーはすでに Java 11+ で問題なく動作するため、将来のリリースでそれを最小バージョンにする予定ですが、今のところ、最新の Java リリースの利点を活用できるオプションコンポーネントを導入する予定です。

そのため、この移行への第一歩として、Selenium 4.5.0 以降から Java 11+ HTTP クライアントが導入されました。

Selenium で Java 11+ HTTP クライアントを使用する

前提条件

  • Java 11+ を使用するように構成されたプロジェクト
  • Selenium 4.5.0 以降のバージョンを使用します。最新バージョンはダウンロードページで確認してください。

Java 11+ クライアントの統合

Java 11+ HTTP クライアントは独自アーティファクトに存在します。Java 11+ を使用するプロジェクトにインポートできます。

POM にアーティファクトを追加する

pom.xml に次の依存関係を追加します。

<dependency>
  <groupId>org.seleniumhq.selenium</groupId>
  <artifactId>selenium-java</artifactId>
  <version>4.5.0</version>
</dependency>
<dependency>
  <groupId>org.seleniumhq.selenium</groupId>
  <artifactId>selenium-http-jdk-client</artifactId>
  <version>4.5.0</version>
</dependency>

注記: 上記の依存関係ではバージョン 4.5.0 が示されていますが、ダウンロードページで最新リリースバージョンを確認して使用することをお勧めします。使用するバージョンが一致していることを確認してください。

システムプロパティを設定する

Java 11+ Http クライアントを使用する必要があることを示すシステムプロパティを設定します。デフォルトでは、AsyncHttpClient が使用されます。

 System.setProperty("webdriver.http.factory", "jdk-http-client");

これで、新しくサポートされたクライアントを活用する準備が整いました。ユーザーエクスペリエンスは変わりません。その他すべては期待どおりに動作します。

Grid で Java 11+ クライアントを使用する

そのためには、selenium-http-jdk-client jar ファイルをダウンロードし、--ext フラグを使用して Grid jar のクラスパスで使用できるようにする必要があります。

jar ファイルは repo1.maven.org から直接ダウンロードし、次の方法で Grid を起動できます。

java -Dwebdriver.http.factory=jdk-http-client -jar selenium-server-4.5.0.jar -—ext selenium-http-jdk-client-4.5.0.jar standalone

selenium-http-jdk-client jar ファイルをダウンロードする代わりに、Coursier を使用することもできます。

java -Dwebdriver.http.factory=jdk-http-client -jar selenium-server-4.5.0.jar —-ext $(coursier fetch -p org.seleniumhq.selenium:selenium-http-jdk-client:4.5.0) standalone

Hub/Node(s) モードまたは分散モードを使用している場合は、-Dwebdriver.http.factory=jdk-http-client フラグと —-ext フラグを各コンポーネントに対して設定する必要があります。

注記: 上記の依存関係ではバージョン 4.5.0 が示されていますが、ダウンロードページで最新リリースバージョンを確認して使用することをお勧めします。使用するバージョンが一致していることを確認してください。

この実現にご尽力いただいた Simon Stewart (@shs96c) に心から感謝いたします!