Techioz Blog

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