一尘不染

Dockerizedselenium浏览器无法访问Capybara测试URL

selenium

我正在尝试在dockerizedselenium独立firefox浏览器上运行Ruby on
Rails功能测试。似乎我在联网方面遇到问题,因为selenium实例无法连接到Capybara启动的URL。

这是我的示例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)

谢谢你的帮助。


阅读 301

收藏
2020-06-26

共1个答案

一尘不染

服务器线程轨在绑定Capybara.server_host接口(默认为127.0.0.1)的情况下运行测试应用程序-
您可以将其更改为docker容器可以与您的计算机进行通讯的任何IP接口-在您可能的情况下

Capybara.server_host = '0.0.0.0' # bind to all interfaces
2020-06-26