【Selenium×Capybara】ChromeDriver バージョン不一致と DNS 解決エラーの対処法
スポンサーリンク

RSpec 実行時に以下のエラーが発生しました:

Rails + Selenium + Capybara を使用して system spec を実行中に、以下の2つのエラーに遭遇しました

  • ChromeDriver バージョン不一致による SessionNotCreatedError

  • net::ERR_NAME_NOT_RESOLVED による DNS 解決エラー

今回はこの2つの事象における対処法について記載していきます。

1. ChromeDriver のバージョン不一致エラー

先に結論を述べると以下の対応を行うことで解決しました。

  • Chrome バージョンChromeDriver 使う

  • /etc/hosts カスタムドメインマッピングする

それぞれを対応について順を追って見ていきましょう。

ChromeDriver バージョン不一致エラー

systemSpecを実行した際に最初に遭遇したエラーは以下です。

Selenium::WebDriver::Error::SessionNotCreatedError:

session not created: This version of ChromeDriver only supports Chrome version 134
Current browser version is 136.0.7103.114

エラーメッセージに記載されている通りなのですが、Google Chrome のバージョンが 136 であるのに対し、インストールされていた ChromeDriver のバージョンが 134 だったため、バージョンの不一致が原因でセッションの作成に失敗していました。

解決方法

まずはChrome のバージョンに対応した ChromeDriver を以下の公式ページからダウンロードします。
Chrome for Testing - Google

ダウンロードした chromedriver を適切なパスに配置します。

# whichコマンドでchromedriverのインストールパスを確認
$ which chromedriver

# 必要に応じて現在のバージョンのバックアップを取っておく
$ /opt/homebrew/bin/chromedriver-134

# ダウンロードしたファイルをchromvedriverのインストールパスに上書き
$ mv ~/Downloads/chromedriver-mac-arm64/chromedriver /opt/homebrew/bin/chromedriver

バージョンを確認して、正しく更新されたことを確認しましょう。

$ chromedriver --version

期待通り ChromeDriver 136.x.x.x が表示されれば OK です。

capybaraの設定

参考までにcapybaraの設定例を以下に記載しておきますので、必要に応じて参照してください。

Capybara設定例

Capybara.asset_host = 'http://myapp.test'
Capybara.default_host = 'http://myapp.test'
Capybara.app_host = 'http://myapp.test'
Capybara.always_include_port = true

Capybara.register_driver :selenium_chrome_headless do |app|
browser_options = Selenium::WebDriver::Chrome::Options.new
browser_options.add_argument('--headless')
browser_options.add_argument('--disable-site-isolation-trials')
browser_options.add_argument('--window-size=1680,1050')
browser_options.add_argument('--lang=ja')
browser_options.add_preference(:download, {
prompt_for_download: false,
default_directory: CapybaraDownloadsHelper.path
})

Capybara::Selenium::Driver.new(app, browser: :chrome, options: browser_options)
end

Capybara.javascript_driver = :selenium_chrome_headless

net::ERR_NAME_NOT_RESOLVED エラー

続いて遭遇したエラーは以下になります。

unknown error: net::ERR_NAME_NOT_RESOLVED
(Session info: chrome=136.0.7103.114)

このエラーの原因としては、Capybara の app_host に設定していたカスタムドメイン(例:http://myapp.test)が、ローカル環境で解決できなかったため、DNS 解決エラーが発生していたことによるものです。

解決方法

macOS の /etc/hosts に以下のエントリを追加することで解決しました。

127.0.0.1 myapp.test

この変更を行なったのち、再度systemSpecを実行するとエラーは解消されていました。

場合によっては同じエラーが出続けることがあるかもしれません。その場合は以下のDNSキャッシュクリアも合わせて実行してみましょう。

$ sudo dscacheutil -flushcache; sudo killall -HUP mDNSResponder

ブラウザの DNS キャッシュもクリアします。
Chrome の場合、アドレスバーに chrome://net-internals/#dns を入力し、「Clear host cache」をクリックしましょう。

おわりに

Capybara を使用したテスト環境でカスタムドメインを利用する際は、ChromeDriver のバージョン管理DNS 解決の設定が重要です。同様のエラーに直面した際の参考になれば幸いです。

スポンサーリンク
おすすめの記事