Docker で Chrome ヘッドレスを実行するときに「Chrome プロセスが 2 秒以内に WebSocket URL を生成しませんでした」を修正する方法
概要
Ruby の機能仕様では Capybara 用の Cuprite ドライバーを使用しています。
スペックはローカルでは正常に動作しますが、CI サーバーでスペックを実行すると、「Chrome プロセスが 2 秒以内に WebSocket URL を生成しませんでした」というエラーが発生して失敗します。 CI サーバーは Docker コンテナ内でスペックを実行します。
Docker イメージは、Google PPA から Chrome の最新バージョン 77.0 をインストールします。
解決策
–no-sandbox オプションを Chrome に渡すようにドライバーを構成する必要があります。
Capybara.register_driver :cuprite do |app|
browser_options = {}.tap do |opts|
opts['no-sandbox'] = nil if ENV['CI']
end
Capybara::Cuprite::Driver.new(app, browser_options: browser_options)
end