Mudando do PhantomJS para o google-chrome headless using Docker

#automated-test, #dev, #docker, #ruby

Tenho usado o PhantomJS por um bom tempo e ele ainda funciona muito bem para o que eu preciso, mas como virou abandonaware é bom migrar antes que ela me deixe no prego.

A mudança no Dockerfile

Você tem que adicionar isso no seu Dockerfile:

run wget -q -O- https://dl.google.com/linux/linux_signing_key.pub | apt-key add - && \
  echo "deb http://dl.google.com/linux/chrome/deb/ stable main" > /etc/apt/sources.list.d/google.list && \
  apt-get update && apt-get install -y libxss1 libappindicator1 libindicator7 google-chrome-stable

Mude baseado no seu Dockerfile atual, mas se quiser apenas testar basta adicionar esse conteúdo no final. Você pode olhar no diff do meu gist para iniciar um projeto Ruby usando docker (para mais informações sobre este gist veja o post De zero a 100: Rodando um projeto Ruby com Docker (Versão curta)).

Mudanças no spec/support/capybara.rb

Minhas configurações no RSpec ficaram assim, no meu caso é o arquivo spec/support/capybara.rb:

Capybara.server = :puma, { Silent: true }

Capybara.register_driver :chrome do |app|
  capabilities = Selenium::WebDriver::Remote::Capabilities.chrome(
    chromeOptions: {
      args: %w[no-sandbox headless disable-popup-blocking disable-gpu]
    }
  )

  Capybara::Selenium::Driver.new(app, browser: :chrome, desired_capabilities: capabilities)
end

Capybara.javascript_driver = :chrome

Se você precisa mudar o tamanho da tela adicione window-size=1280,1024 na mesma linha do args. Até agora eu participei somente de um projeto que precisa mudar o tamanho da tela.

Referências