art*_*nce 6 selenium rspec ruby-on-rails capybara docker
我试图在dockerized selenium独立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"
Run Code Online (Sandbox Code Playgroud)
我启动了docker-compose并启用了网络:
docker-compose --x-networking up
Run Code Online (Sandbox Code Playgroud)
测试脚本运行这样的rspec命令
rspec ./spec/features/login_spec.rb:43
Run Code Online (Sandbox Code Playgroud)
对于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
Run Code Online (Sandbox Code Playgroud)
最后我将测试称为:
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"
...
Run Code Online (Sandbox Code Playgroud)
我可以拖尾浏览器容器日志,我看到selenium从Capybara接收命令.问题是它无法连接到提供的网址,我可以通过屏幕截图确认.
Firefox无法在my-app上建立与服务器的连接:56555
为了更好地理解这个问题,我启动了rails app,并尝试从selenium容器中访问它.我注意到,如果我使用ip绑定启动rails应用程序,我只能从selenium容器访问该应用程序.
rails s Puma -b 0.0.0.0
Run Code Online (Sandbox Code Playgroud)
这看起来像一个网络问题,但我无法找到解决方案.
如何让selenium容器访问使用Capybara运行Rspec功能测试的rails应用程序?
capybara (2.6.0)
selenium-webdriver (2.48.1)
Run Code Online (Sandbox Code Playgroud)
谢谢你的帮助.
服务器线程rails运行测试应用程序绑定到Capybara.server_host接口(默认情况下为127.0.0.1) - 您可以将其更改为docker容器可以与您的机器通话的任何ip接口 - 在您的情况下可能
Capybara.server_host = '0.0.0.0' # bind to all interfaces
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1512 次 |
最近记录: |