Chrome を使用して GitHub 上の Selenium の DevToolsActivePort ファイル エラーを修正するアクション

ChromeDriver

CI/CD パイプラインでの Chrome テストの失敗を克服する

Selenium テストの実行 の上 シームレスである必要があります。しかし、多くの開発者は「DevToolsActivePort ファイルが存在しません」というイライラするエラーに直面しています。これは、何らかの理由で Chrome が CI 環境で適切に起動できない場合に発生します。

エラー メッセージは通常、Chrome が予期せずクラッシュしていることを示します。これは多くの場合、不一致の結果です。 そして バージョン、またはテスト セットアップのオプションの設定が間違っている可能性があります。多くの開発者と同様に、私もこの課題に直面しました。特に、自動テストを環境にデプロイする場合に顕著です。 環境。

この設定では、ChromeDriver のバージョンの不一致など、ほんのわずかな不一致によってテストの実行が停止し、貴重な時間とリソースが浪費される可能性があります。幸いなことに、根本的な問題を理解すると、解決がはるかに簡単になります🛠️。

このガイドでは、この一般的なエラーを防止し、トラブルシューティングするための実践的な手順を詳しく説明します。 Chrome のインストールの詳細からドライバーの適切な初期化まで、毎回スムーズなテストを実行するための段階的なプロセスがわかります。この問題に取り組み、テストを軌道に戻しましょう。

指示 使用例
CHROME_VERSION="117.0.5938.62" 特定の Chrome バージョンを設定します。これは、Chrome と ChromeDriver の間の不一致を防ぐために CI テスト中に ChromeDriver の互換性を確保するために不可欠です。
MAJOR_VERSION=$(echo $CHROME_VERSION | cut -d '.' -f1) Chrome の完全バージョンからメジャー バージョン番号を抽出します。これは、ChromeDriver の一致するバージョンをダウンロードし、互換性を確保するために使用されます。
LATEST_DRIVER=$(wget -qO- ...) 指定された Chrome バージョンと互換性のある最新の ChromeDriver バージョンを取得します。これは、自動化スクリプトでの「DevToolsActivePort」エラーを回避するために不可欠です。
if [ -z "$LATEST_DRIVER" ] ChromeDriver バージョン変数が空かどうかを確認します。これは、互換性のあるバージョンを取得する際のエラーを示します。この条件は、フォールバックを適用してテストの失敗を防ぐのに役立ちます。
sudo dpkg -i $CHROME_DEB dpkg を使用して、ダウンロードした Chrome パッケージをインストールします。これは、GitHub Actions などの Linux 環境で特に便利です。
sudo rm -f /usr/local/bin/chromedriver 以前にインストールされた ChromeDriver を削除します。これにより、新規インストール時にバージョンの競合が発生しなくなります。
options.addArguments("--no-sandbox") Chrome のサンドボックス機能を無効にします。サンドボックスにより Chrome がヘッドレス モードで起動できなくなる可能性があるため、これは CI 環境では特に重要です。
options.addArguments("--disable-dev-shm-usage") /dev/shm の使用を無効にすることで利用可能な共有メモリを増やします。これにより、コンテナなどメモリが限られた環境で Chrome がクラッシュするのを防ぐことができます。
options.addArguments("--remote-debugging-port=9222") 指定したポートでのリモート デバッグを有効にします。これは、ヘッドレス Chrome が一部の環境で正しく動作し、「DevToolsActivePort」エラーを防ぐための要件です。
driver.quit() すべての Chrome ウィンドウを閉じて WebDriver セッションを終了し、リソースを解放します。これは、CI/CD パイプラインでリソース リークを防ぎ、使用可能なメモリの不足を避けるために不可欠です。

CI での Chrome および ChromeDriver セットアップの詳細なソリューション

上記のスクリプトは、Chrome と ChromeDriver の両方をインストールして設定するように設計されています。 環境、特に「DevToolsActivePort ファイルが存在しません」エラーに対処します。この問題は通常、ヘッドレス モードで実行されている Chrome が不一致またはメモリの制約により適切に開始できない場合に発生します。最初のスクリプトは、Chrome のバージョンを指定し、実行に重要な ChromeDriver との互換性を確保することでこれに取り組みます。 テスト。最初のコマンドは、apt パッケージの更新を実行し、wget を使用してミラーから Google Chrome の特定のバージョンを取得します。ミラーを使用すると、特にデフォルトのリポジトリにこのバージョンがない場合に、適切なバージョンが確実にインストールされます。このアプローチにより、異なるテスト実行間で一貫したバージョンの Chrome が使用されることが保証されます。

次に、スクリプトは、解析するコマンドを使用してメジャー バージョンを Chrome から分離し(たとえば、「117.0.5938.62」から「117」)、バージョン互換性のある ChromeDriver のインストールに進みます。これにより、スクリプトは ChromeDriver リリース用に設計された URL パターンを使用して、その特定のメジャー バージョンに必要な正確な ChromeDriver を取得できるようになります。これらのバージョンが一致していることを確認することで、セットアップにより、バージョンの不一致によって ChromeDriver の初期化エラーが発生することを防ぎます。これにより、多くの場合 DevTools エラーが引き起こされます。 ChromeDriver が特定のバージョンのダウンロードに失敗した場合、スクリプトには最新リリースをダウンロードするフォールバック オプションが含まれており、柔軟性が維持されます。これらの手順は、迅速で信頼性の高いソリューションが最優先される自動化された CI/CD パイプラインで特に役立ちます 🔧。

ダウンロード後、スクリプトは、古いドライバーとの競合を避けるために、「sudo rm -f」を使用して、以前にインストールされた ChromeDriver をシステムから削除します。これにより、正しいバージョンのみが確実に配置され、テストの安定性を損なう可能性のあるバージョンの競合のリスクが最小限に抑えられます。 ChromeDriver の権限も実行可能に設定されます。これは、CI/CD 環境でドライバーを起動するために必要な手順です。 「--no-sandbox」や「--disable-dev-shm-usage」などのオプションを使用して Chrome を「ヘッドレス」モードで使用すると、Chrome のリソース フットプリントも削減されます。これらのオプションを使用すると、DevToolsActivePort エラーの背後にある一般的な原因の 1 つである Chrome のクラッシュを引き起こすことなく、リソースが限られた環境 (クラウド サーバーや CI パイプラインなど) でテストを実行できます。

最後に、WebDriver セットアップで、「--disable-gpu」や「--remote-debugging-port=9222」などのオプションを使用すると、Chrome がヘッドレス モードでより安定して実行されます。 「--disable-gpu」フラグは GPU レンダリングを無効にしますが、これは不要であり、ヘッドレス モードでは問題になる場合があります。一方、「--remote-debugging-port」オプションを使用すると、Chrome は、Selenium が CI で接続するために必要なデバッグ ポートを開くことができます。つまり、この設定により一般的な自動化のボトルネックが回避され、より信頼性が高く堅牢なテスト環境が実現します。その結果、これらのスクリプトにより、CI/CD システム上でのヘッドレス Chrome の実行がよりスムーズになり、自動テストが問題なく一貫して実行されるようになります 🚀。

GitHub Actions での Selenium テストでの「DevToolsActivePort ファイルが存在しません」エラーを解決する

解決策 1: Chrome および ChromeDriver のインストールおよび構成スクリプト

sudo apt-get update
sudo apt-get install -y wget apt-transport-https curl
CHROME_VERSION="117.0.5938.62"
CHROME_DEB="google-chrome-stable_${CHROME_VERSION}-1_amd64.deb"
wget https://mirror.cs.uchicago.edu/google-chrome/pool/main/g/google-chrome-stable/$CHROME_DEB
sudo dpkg -i $CHROME_DEB || sudo apt-get install -f -y
# Install ChromeDriver matching Chrome
sudo apt-get install -y wget unzip
MAJOR_VERSION=$(echo $CHROME_VERSION | cut -d '.' -f1)
LATEST_DRIVER=$(wget -qO- https://chromedriver.storage.googleapis.com/LATEST_RELEASE_$MAJOR_VERSION)
if [ -z "$LATEST_DRIVER" ]; then
  echo "Falling back to latest ChromeDriver version."
  LATEST_DRIVER=$(wget -qO- https://chromedriver.storage.googleapis.com/LATEST_RELEASE)
fi
sudo rm -f /usr/local/bin/chromedriver
wget https://chromedriver.storage.googleapis.com/$LATEST_DRIVER/chromedriver_linux64.zip
unzip chromedriver_linux64.zip
sudo mv chromedriver /usr/local/bin/
sudo chmod +x /usr/local/bin/chromedriver

ヘッドレス モードでの GitHub Actions 用の Java を使用した WebDriver のセットアップ

解決策 2: Chrome オプションを構成し、Java で WebDriver を初期化する

// Import necessary libraries
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;
import io.github.bonigarcia.wdm.WebDriverManager;
// Set up ChromeDriver
WebDriverManager.chromedriver().setup();
ChromeOptions options = new ChromeOptions();
options.addArguments("--no-sandbox");
options.addArguments("--disable-dev-shm-usage");
options.addArguments("--headless");
options.addArguments("--disable-gpu");
options.addArguments("--remote-debugging-port=9222");
ChromeDriver driver = new ChromeDriver(options);
// Start Selenium test logic here
driver.quit();

Chrome と WebDriver の互換性を検証するための単体テストの追加

解決策 3: 単体テストで互換性を確保し、CI 実行時のエラーを防止する

import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;
class WebDriverTests {
  private WebDriver driver;
  @BeforeEach
  void setUp() {
    ChromeOptions options = new ChromeOptions();
    options.addArguments("--headless");
    options.addArguments("--no-sandbox");
    driver = new ChromeDriver(options);
  }
  @Test
  void testDriverInitialization() {
    driver.get("https://www.google.com");
    assertEquals("Google", driver.getTitle());
  }
  @AfterEach
  void tearDown() {
    driver.quit();
  }
}

GitHub Actions とヘッドレス Chrome を使用した Selenium テストの最適化

ランニングの重要な側面の 1 つ GitHub Actions のような CI/CD パイプラインで Selenium を使用すると、環境上の制約が理解されます。 Chrome をヘッドレス モードで実行すると、グラフィカル インターフェイスなしで動作するため、CI 環境に最適です。ただし、ヘッドレス Chrome はシステム構成の影響を受けやすいため、ローカル環境に比べて追加のセットアップが必要になります。 「DevToolsActivePort ファイルが存在しません」というエラーは、一般的に Chrome の初期化の失敗に関連しており、メモリの制約や構成の不一致が原因であることがよくあります。次のようなメモリ効率の高い構成を実装する そして はこれらの問題を解決し、メモリが制限された CI/CD 環境でのテストを大幅に安定させることができます。

互換性を確保するには、Chrome と ChromeDriver の両方のバージョンを一致させることが重要です。ランナーがデフォルトで最新バージョンを使用し、ChromeDriver の要件と一致しない可能性があるため、一貫性のないバージョンは GitHub Actions でのエラーの原因となることがよくあります。これに対処するために、私たちのソリューションには、Chrome のメジャー バージョンを解析して、対応する正確な ChromeDriver バージョンを取得し、安定性を向上させる機能が含まれています。さらに、設定 通信ポートを有効にすることで、ChromeDriver がブラウザとより確実に対話できるようになります。この設定は、GitHub Actions または同様のツールを使用して自動化を実行する場合に不可欠です。 仮想マシン上で。

これらの構成は効率に大きな違いをもたらし、エラーを減らし、テスト実行の信頼性を向上させます。リソース効率の高いオプションを確保し、正しいバージョンを使用することで、ヘッドレス Chrome の実行が成功する可能性が大幅に高まり、開発者がテスト中にイライラするエラーに対処する必要がなくなります。最終的に、堅牢な構成と互換性のある依存関係により、CI/CD のテスト エクスペリエンスがよりスムーズになり、開発者は永続的なセットアップの問題 🚀 を中断することなく、アプリケーションの作成と改善に集中できるようになります。

  1. 「DevToolsActivePort ファイルが存在しません」というエラーは何を意味しますか?
  2. このエラーは、通常、セットアップの不一致またはシステム リソースの不足が原因で、Chrome がヘッドレス モードで適切に起動できない場合に発生します。メモリオプションの調整 解決することが多いです。
  3. Chrome と ChromeDriver のバージョンを一致させることが重要なのはなぜですか?
  4. バージョンを一致させると、互換性エラーが回避されます。使用する 特定の ChromeDriver を取得することで、スムーズに連携できるようになります。
  5. どのようにして ヘッドレステストに役立ちますか?
  6. これにより、Chrome のポートを ChromeDriver で制御できるようになり、テストがより効果的にブラウザ インスタンスに接続できるようになり、DevTools エラーが防止されます。
  7. どういうことですか する?
  8. これにより、制限された環境ではサンドボックスによりヘッドレス Chrome がクラッシュする可能性があるため、Chrome のサンドボックスが無効になります。これにより、CI 環境で Chrome が起動できるようになります。
  9. ChromeDriver バージョンのダウンロードに失敗した場合のフォールバックはありますか?
  10. はい、スクリプトには次のフォールバックが含まれています。 バージョンの一致が失敗した場合、インストールされている Chrome のバージョンに関係なく ChromeDriver が利用可能であることを確認します。
  11. CI/CD パイプラインにおける Chrome のメモリ関連の問題を回避するにはどうすればよいですか?
  12. 使用する 共有メモリをリダイレクトし、CI 環境の /dev/shm スペースの制限による Chrome のクラッシュを防ぎます。
  13. ヘッドレス モードで Chrome をデバッグできますか?
  14. はい、使用しています ローカルでテストを実行すると、Chrome DevTools を開いてヘッドレス モードでデバッグできるようになります。
  15. WebDriverManager は ChromeDriver の更新を自動的に処理しますか?
  16. WebDriverManager はローカルでのドライバーの更新を簡素化しますが、CI/CD パイプラインでは、示されているように特定のバージョンをセットアップする方が、反復可能なビルドの信頼性が高くなります。
  17. 目的は何ですか 脚本の中で?
  18. このコマンドは、Chrome を閉じて WebDriver セッションを終了することでリソースを解放し、CI/CD 環境でのメモリ リークを防ぎます。
  19. コミットする前に GitHub Actions で Selenium セットアップをテストするにはどうすればよいですか?
  20. ローカルでテストを実行する オプションと CI 構成により、GitHub にプッシュする前に問題をキャッチできるため、デバッグが容易になります。
  21. CI の ChromeDriver にはどのような権限が必要ですか?
  22. ChromeDriver には、によって設定された実行権限が必要です , GitHub Actions でテストを正常に実行するには。

GitHub Actions 上のヘッドレス Chrome を使用して Selenium テストの正しいセットアップを確保すると、時間が節約され、信頼性が向上します。 「DevToolsActivePort ファイルが存在しません」などのエラーに対処すると、CI/CD テストがよりシームレスになり、開発者のストレスが軽減されます。

揃えることで Chrome のバージョンとメモリ効率の高いオプションを構成するこのアプローチは、制約のある環境でテストを効率的に実行するのに役立ちます。これは、開発者がテストの中断を心配することなく、主要なタスクに集中できる実用的なソリューションです 🚀。

  1. CI/CD 環境のヘッドレス Chrome での DevToolsActivePort の問題の処理に関する詳細なトラブルシューティング ガイド。 Selenium WebDriver ドキュメント
  2. 継続的統合セットアップにおける Chrome および ChromeDriver バージョンの包括的なインストールと構成手順。 GitHub アクションのドキュメント
  3. ChromeDriver のセットアップ、互換性、構成オプションに関する段階的なソリューション。 WebDriverManager ドキュメント
  4. 特に制限された環境で、CI/CD でのメモリ効率を高めるためにヘッドレス Chrome を構成するためのベスト プラクティスに関するリファレンス。続きを読む Google Chrome 開発者ガイド