PIYO - Tech & Life -

Circle CIでHeadless Chrome 解決編

CI RSpec

CircleCIでHeadless Chromeを使ったテストが動かないっぽい件で、ひとまずunless使ってGemfileを条件分岐するというお行儀の悪いことをしていましたが、もしかしたら直ったような気がするので、改めてメモしておきます。

前々回の記事と、

Headless ChromeのテストがCircleCI上で動かなかった - PIYO - Tech & Life -
おとといの記事でHeadlessChromeを使ってテストするようにしたよ、と書きました。 RailsのFeatureテスト環境をHeadless Chromeに変更した - PIYO - Tech & Life - Poltergeist detected another element ...に対応

前回の記事がこのへん。

[追記あり]再びCircleCIでsession not created exception - PIYO - Tech & Life -
4/19あたりからCircleCIでまたこのエラーがでるようになりました。 session not created exception: Chrome version must be >= 65.0.3325.0 多分、Gemfileに入れていたchromedriver-helperとDockerイメージに入っているC

そもそもの理由はchromedriver-helpergemがインストールするchromeドライバーとCircleCIのイメージに入っているChromeのバージョンに整合性がないのがえらーとなっていた理由です。で、Chromeのアップグレードを色々試みたんですが、どうやらこれでいけそうでした。

- run:
    name: Install Latest Chrome
    command: |
      sudo apt install libappindicator3-1
      curl -L -o google-chrome.deb https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb
      sudo dpkg -i google-chrome.deb
      sudo sed -i 's|HERE/chrome\"|HERE/chrome\" --disable-setuid-sandbox|g' /opt/google/chrome/google-chrome
      rm google-chrome.deb      

バージョンの整合性は解決したものの、Chrome failed to start: crashedのようなエラーが出たりとか、別のプロジェクトでno such sessionという話も聞いたりしていたので、テスト用にno-sandboxオプションを追加してこれらを回避することにしました。

テストで一時的に使うのにセキュリティ上の理由はあまりないはずなので、sandbox外で実行するのは問題ないはず。これで起動しないなどのエラーを回避できたので、ひとまずこれで様子をみたいと思います。