2016-01-29 21 views
5

Sto tentando di eseguire i test delle funzionalità di Ruby on Rails sul browser firefox autonomo del selenio. Sembra che sto avendo problemi con il networking perché l'istanza del selenio non può collegare all'URL avviato da Capybara.Il browser del selenio Dockerizzato non può accedere all'URL del test Capybara

Ecco il mio campione docker-compose.yml di file:

ff: 
    image: selenium/standalone-firefox:2.48.2 
    container_name: firefox-browser 
web: 
    build: . 
    container_name: my-app 
    volumes: 
    - ".:/home/ubuntu/my-app" 
    command: /bin/bash -l scripts/docker-start-tests.sh 
    ports: 
    - "3000:3000" 

e mi metto finestra mobile-comporre con supporto di rete abilitata:

docker-compose --x-networking up 

Lo script di test viene eseguito un comando rspec come questo

rspec ./spec/features/login_spec.rb:43 

Per i test docker ho abilitato il driver remoto per Capybara:

Capybara.register_driver :docker_firefox do |app| 
    Capybara::Selenium::Driver.new(app, { 
    browser: :remote, 
    url: "#{ENV['FF_URL']}/wd/hub", 
    desired_capabilities: Selenium::WebDriver::Remote::Capabilities.firefox 
    }) 
end 

E infine io chiamo il test come questo:

unless ENV['FF_URL'].nil? 
    Capybara.current_driver = :docker_firefox 
    Capybara.javascript_driver = :docker_firefox 

    Capybara.app_host = "http://my-app:56555" 
    Capybara.server_port = "56555" 
    # Capybara.server_host = "my-app" 
end 

visit root_path 
save_and_open_screenshot 
click_link "Sign in" 
... 

posso coda tronchi container del browser e vedo che il selenio riceve i comandi da Capybara. Il problema è che non può connettersi all'URL fornito, che posso confermare con lo screenshot.

Firefox non può stabilire una connessione al server my-app: 56555

Per capire meglio il problema, ho iniziato l'applicazione rotaie e ho cercato di accedervi dal contenitore selenio . Ho notato che posso accedere all'app dal contenitore del selenio solo se avvio l'app per i binari con un binding IP.

rails s Puma -b 0.0.0.0 

Questo sembra un problema di rete, ma non riesco a capire una soluzione.

Come posso fare in modo che il contenitore di selenio acceda all'app per rails che esegue test di funzionalità Rspec con Capybara?

capybara (2.6.0) 
selenium-webdriver (2.48.1) 

Grazie per il vostro aiuto.

+0

I binari filo server esegue l'applicazione di prova in lega a Capybara.server_host (127.0.0.1 per impostazione predefinita) - si può provare a cambiare che a qualunque IP dell'interfaccia del contenitore finestra mobile può parlare di nuovo al vostro macchina - forse 0.0.0.0 –

+0

@TomWalpole Ti stai riferendo a 'Capybara.app_host'? Analizzo l'IP assegnato per il container che esegue le guide e lo passo all'app_host. Tuttavia, non posso accedervi dal contenitore del selenio. – artsince

+1

No - Capybara.app_host viene utilizzato per creare gli indirizzi che il browser deve visitare, Capybara.server_host imposta l'ip sull'app di test per le connessioni dal browser –

risposta

4

Le barre di thread del server eseguono l'applicazione di test in binding all'interfaccia Capybara.server_host (127.0.0.1 per impostazione predefinita) - È possibile cambiarla in qualsiasi interfaccia IP che il contenitore docker può riaccendere sul proprio computer - nel proprio caso possibilmente

Capybara.server_host = '0.0.0.0' # bind to all interfaces