require "capybara/cuprite" REMOTE_CHROME_URL = ENV.fetch("CHROME_URL", nil) REMOTE_CHROME_HOST, REMOTE_CHROME_PORT = if REMOTE_CHROME_URL URI.parse(REMOTE_CHROME_URL).then do |uri| [uri.host, uri.port] end end remote_chrome = begin if REMOTE_CHROME_URL.nil? false else Socket.tcp(REMOTE_CHROME_HOST, REMOTE_CHROME_PORT, connect_timeout: 1).close true end rescue Errno::ECONNREFUSED, Errno::EHOSTUNREACH, SocketError false end remote_options = remote_chrome ? { url: REMOTE_CHROME_URL } : {} Capybara.register_driver(:better_cuprite) do |app| Capybara::Cuprite::Driver.new( app, **{ window_size: [1200, 800], browser_options: {}, process_timeout: 10, inspector: true, headless: !ENV["HEADLESS"].in?(%w[n 0 no false]) }.merge(remote_options), ) end