♨️

Selenium+Chromeでドライバーのバージョンエラー

2023/08/20に公開

概要

環境

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を見てください。

https://github.com/titusfortner/webdrivers/issues/247

この辺から読むとわかりますが、最新の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