Selenium+Chromeでドライバーのバージョンエラー
概要
環境
CircleCI上でのエラーでの解決法の説明です。
ruby 2.6.9
selenium-webdriver 3.142.7
webdrivers 4.4.1
CircleCI circleci/ruby:2.6.3-node-browsers
エラー文
下記エラーでSelenium関係のテスト全てがコケました。
Selenium::WebDriver::Error::SessionNotCreatedError:
session not created: This version of ChromeDriver only supports Chrome version 114
Current browser version is 116.0.5845.96 with binary path /usr/bin/google-chrome
(Driver info: chromedriver=114.0.5735.90 (386bc09e8f4f2e025eddae123f36f6263096ae49-refs/branch-heads/5735@{#1052}),platform=Linux 5.15.0-1039-aws x86_64)
解決法
※ 後述しますがrubyのバージョンによってはもう少しスマートに解決できる可能性があります。
エラーを読めば分かるのですがChromeのバージョンとchromedriverバージョンが合ってないので合わせればいいと言うことですね。
今回の環境ではwebdriversという自動でドライバーをダウンロードしてくるGemを使ってるのですが、それが正しいバージョンをダウンロードできなかったのが原因です。
で、こちらのchromedriverのバージョンリストをみるとこんな注意書きが。
If you are using Chrome version 115 or newer, please consult the Chrome for Testing availability dashboard. This page provides convenient JSON endpoints for specific ChromeDriver version downloading.
最新のバージョンはリリースされてるんだけど、webdriversがJSONのendpointsからバージョンを取得するところに問題があり、うまく取得できないようです。
こちらから最新のドライバをダウンロードして使えば良さそうですね。
最新のドライバを使用する
webdriversの使用をやめ、.circleci/config.yml
で最新のドライバーをインストールします。
.circleci/config.yml
- run:
name: install chromedriver
command: |
wget --no-verbose -O /tmp/chromedriver.zip https://edgedl.me.gvt1.com/edgedl/chrome/chrome-for-testing/116.0.5845.96/linux64/chromedriver-linux64.zip
unzip -d /tmp /tmp/chromedriver.zip
sudo mv /tmp/chromedriver-linux64/chromedriver /usr/local/bin/
ただ116.0.5845.96を指定してるのでChromeのバージョンが上がればコケ出しますね。最新のものをダウンロードして使うのもできそうですが、まあそれをやっているのがwebdrivers
なわけで自分で作るのもなんですよね。パスを/edgedl/chrome/chrome-for-testing/latest/linux64/chromedriver-linux64.zip
とかにしてくれれば簡単なのに・・・
先ほど
※ 後述しますがrubyのバージョンによってはもう少しスマートに解決できる可能性があります。
と言いましたが、こちらのISSUEを見てください。
この辺から読むとわかりますが、最新のselenium-webserverを使えばうまくダウンロードしてくれるようですね。それには今回の環境ではrubyをアップブレードしないとダメで、試してみたけど、あれも、これも、アップグレードしないといけなくなり、かなり手間がかかるので途中でやめました。そのうち試してみます。
そう考えると、古いrubyを使ってる人の問題であって、この記事で助かる人ってあまりいなそうな気もしてきますね・・・まあ自分のためのメモってことで勘弁してください。
Chromeのダウングレード
Chromeをダウングレードしてもうまくいきました。これなら時間が経ってもコケることはありませんが、Chromeバージョン固定されるのが問題ですよね。手間はかかるけどコケて教えてもらった方がマシなので採用しませんでしたが、コードは残しときます。
circleciのimageはUbuntuなのでこちらで古いバージョンのリストを見れます。ドライバと同じバージョンを探したら(今回は114.0.5735.90を使用)、CircleCIのconfigで下記のようにすればインストール可能です。
.circleci/config.yml
steps:
- run:
name: Install Chrome
command: |
wget --no-verbose -O /tmp/chrome.deb https://dl.google.com/linux/chrome/deb/pool/main/g/google-chrome-stable/google-chrome-stable_114.0.5735.90-1_amd64.deb
sudo apt install -y --allow-downgrades /tmp/chrome.deb
rm /tmp/chrome.deb
Discussion