我正在尝试在dockerizedselenium独立firefox浏览器上运行Ruby on Rails功能测试。似乎我在联网方面遇到问题,因为selenium实例无法连接到Capybara启动的URL。
这是我的示例docker-compose.yml文件:
docker-compose.yml
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"
我在启用网络的情况下开始docker-compose:
docker-compose --x-networking up
测试脚本像这样运行一个rspec命令
rspec ./spec/features/login_spec.rb:43
对于docker测试,我为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
最后,我这样调用测试:
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" ...
我可以浏览器容器日志的尾部,我看到selenium接收到来自水豚的命令。问题是它无法连接到所提供的URL,我可以用屏幕快照确认。
Firefox无法在my-app:56555与服务器建立连接
为了更好地理解问题,我启动了Rails应用程序,并尝试从selenium容器中访问它。我注意到,如果我使用ip绑定启动rails应用程序,则只能从selenium容器访问该应用程序。
rails s Puma -b 0.0.0.0
这看起来像是网络问题,但是我找不到解决方案。
如何使用Capybara使selenium容器访问运行Rspec功能测试的rails应用程序?
capybara (2.6.0) selenium-webdriver (2.48.1)
谢谢你的帮助。
服务器线程轨在绑定Capybara.server_host接口(默认为127.0.0.1)的情况下运行测试应用程序- 您可以将其更改为docker容器可以与您的计算机进行通讯的任何IP接口-在您可能的情况下
Capybara.server_host = '0.0.0.0' # bind to all interfaces