2016-01-29 38 views
5

Tôi đang cố gắng chạy thử nghiệm tính năng Ruby on Rails trên trình duyệt firefox độc lập selenium dockerized. Có vẻ như tôi đang gặp sự cố với mạng vì bản sao selen không thể kết nối với url do Capybara bắt đầu.Trình duyệt selen được hỗ trợ không thể truy cập vào địa chỉ kiểm tra Capybara

Dưới đây là mẫu của tôi docker-compose.yml 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" 

Và tôi bắt đầu Docker-soạn with Networking được kích hoạt:

docker-compose --x-networking up 

Các kịch bản thử nghiệm chạy một lệnh rspec như thế này

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

Đối với các thử nghiệm docker, tôi đã bật trình điều khiển từ xa cho 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 

Và cuối cùng tôi gọi là thử nghiệm như thế này:

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" 
... 

tôi có thể đuôi các bản ghi chứa trình duyệt và tôi thấy rằng selen nhận lệnh từ Capybara. Vấn đề là nó không thể kết nối với url được cung cấp, mà tôi có thể xác nhận với ảnh chụp màn hình.

Firefox không thể thiết lập một kết nối đến máy chủ tại my-app: 56555

Để hiểu rõ hơn vấn đề, tôi bắt đầu ứng dụng đường ray và tôi đã cố gắng để truy cập nó từ container selen . Tôi nhận thấy rằng tôi chỉ có thể truy cập ứng dụng từ vùng chứa selen nếu tôi bắt đầu ứng dụng đường ray với một ràng buộc ip.

rails s Puma -b 0.0.0.0 

Điều này có vẻ như vấn đề về mạng, nhưng tôi không thể tìm ra giải pháp.

Làm cách nào để tạo vùng chứa selen truy cập ứng dụng đường ray chạy các thử nghiệm tính năng Rspec với Capybara?

capybara (2.6.0) 
selenium-webdriver (2.48.1) 

Cảm ơn sự giúp đỡ của bạn.

+0

máy chủ ray đề chạy các ứng dụng thử nghiệm trong liên kết với Capybara.server_host (127.0.0.1 theo mặc định) - bạn có thể thử thay đổi đó để bất cứ điều gì ip giao diện container Docker có thể nói chuyện trở lại máy tính của bạn trên - có thể 0.0.0.0 –

+0

@TomWalpole Bạn đang đề cập đến 'Capybara.app_host'? Tôi phân tích các ip được giao cho container chạy đường ray và tôi vượt qua nó để app_host. Tuy nhiên, tôi không thể truy cập nó từ thùng chứa selen. – artsince

+1

Không - Capybara.app_host được sử dụng để xây dựng địa chỉ trình duyệt được yêu cầu truy cập, Capybara.server_host đặt ứng dụng thử nghiệm ip lắng nghe cho các kết nối từ trình duyệt –

Trả lời

4

Rails chủ đề máy chủ chạy ứng dụng thử nghiệm liên kết với giao diện Capybara.server_host (127.0.0.1 theo mặc định) - Bạn có thể thay đổi giao diện ip đó thành bộ chứa docker có thể nói lại với máy của bạn - trong trường hợp của bạn có thể

Capybara.server_host = '0.0.0.0' # bind to all interfaces 
Các vấn đề liên quan