Rspec 如何配置Capybara在停靠的Selenium网格中运行测试?

Rspec 如何配置Capybara在停靠的Selenium网格中运行测试?,rspec,capybara,docker-compose,selenium-grid,dinghy,Rspec,Capybara,Docker Compose,Selenium Grid,Dinghy,我有一套测试要在停靠的Selenium网格中执行。测试是使用RSpec和Capybara用Ruby编写的。同样值得注意的是:我正在使用docker机器作为包装 几周前,我用夜表代替RSpec+水豚构建了一个but。这很好,但要让水豚与停靠的硒网格协同工作已被证明是困难的 我尝试了许多配置,但都没有成功。我认为最接近成功配置的是以下内容 # docker-compose.yml web: image: web:latest # built on my machine environme

我有一套测试要在停靠的Selenium网格中执行。测试是使用RSpec和Capybara用Ruby编写的。同样值得注意的是:我正在使用docker机器作为包装

几周前,我用夜表代替RSpec+水豚构建了一个but。这很好,但要让水豚与停靠的硒网格协同工作已被证明是困难的

我尝试了许多配置,但都没有成功。我认为最接近成功配置的是以下内容

# docker-compose.yml

web:
  image: web:latest  # built on my machine
  environment:
    VIRTUAL_HOST: app.under.test

rspec:
  build: .
  dockerfile: Dockerfile
  environment:
    APP_HOST: app.under.test
  volumes:
    - .:/usr/src/app
  links:
    - web
    - hub

hub:
  image: selenium/hub:latest
  environment:
    VIRTUAL_HOST: selenium.hub.docker
  ports:
    - 4444:4444

node-firefox:
  image: selenium/node-firefox:latest
  environment:
    VIRTUAL_HOST: firefox.docker
  links:
    - hub

node-chrome:
  image: selenium/node-chrome:latest
  environment:
    VIRTUAL_HOST: chrome.docker
  links:
    - hub
rspec映像的Dockerfile 来自instructure/ruby乘客:2.3 用户根 环境应用程序_HOME/usr/src/APP 运行mkdir-p$APP\u HOME WORKDIR$APP_主页 复制Gemfile Gemfile.lock$APP\u HOME/ 运行chown-R docker:docker$APP_HOME 用户docker 运行bundle安装--安静--作业8 用户根 抄袭$APP_主页 运行chown-R docker:docker$APP_HOME 用户docker
#spec/example_test.rb:
需要“rspec”
需要“水豚”
需要“水豚/dsl”
需要“selenium webdriver”
RSpec.configure do | config|
config.include水豚::DSL
结束
def设置
url='1〕http://selenium.hub.docker'
capabilities=Selenium::WebDriver::Remote::capabilities.firefox
Capybara.app_host=ENV['app_host']
Capybara.register_驱动程序:远程浏览器do|应用程序|
水豚::硒::Driver.new(
应用程序,
:browser=>:远程,
url:url,
期望的功能:功能
)
结束
Capybara.default\u driver=:远程\u浏览器
Capybara.javascript\u驱动程序=:远程\u浏览器
结束
描述“这是一个例子”做什么
它'和它的工作'做
设置
访问“/”
期望(第页标题)为“主页”
结束
结束
但此配置在启动测试时会产生以下错误:

1)这是一个很好的例子
失败/错误:访问“/”
Selenium::WebDriver::错误::WebDriverError:
意外响应,代码=200,内容类型=“text/html”
Selenium Grid2.0帮助您正在使用grid 2.52.0
在官方Selenium wiki上查找帮助:
默认监控页面: #/home/docker/.gem/ruby/2.3.0/gems/selenium-webdriver-2.52.0/lib/selenium/webdriver/remote/http/common.rb:85:in“create_response” #/home/docker/.gem/ruby/2.3.0/gems/selenium-webdriver-2.52.0/lib/selenium/webdriver/remote/http/default.rb:90:in'request' #/home/docker/.gem/ruby/2.3.0/gems/selenium-webdriver-2.52.0/lib/selenium/webdriver/remote/http/common.rb:59:in'call' #/home/docker/.gem/ruby/2.3.0/gems/selenium-webdriver-2.52.0/lib/selenium/webdriver/remote/bridge.rb:645:in'raw_execute' #/home/docker/.gem/ruby/2.3.0/gems/selenium-webdriver-2.52.0/lib/selenium/webdriver/remote/bridge.rb:123:在“创建会话”中 #/home/docker/.gem/ruby/2.3.0/gems/selenium-webdriver-2.52.0/lib/selenium/webdriver/remote/bridge.rb:87:在“初始化”中 #/home/docker/.gem/ruby/2.3.0/gems/selenium-webdriver-2.52.0/lib/selenium/webdriver/common/driver.rb:59:in“new” #/home/docker/.gem/ruby/2.3.0/gems/selenium-webdriver-2.52.0/lib/selenium/webdriver/common/driver.rb:59:in'for' #/home/docker/.gem/ruby/2.3.0/gems/selenium-webdriver-2.52.0/lib/selenium/webdriver.rb:86:in'for' #/home/docker/.gem/ruby/2.3.0/gems/capybara-2.6.2/lib/capybara/selenium/driver.rb:13:在“浏览器”中 #/home/docker/.gem/ruby/2.3.0/gems/capybara-2.6.2/lib/capybara/selenium/driver.rb:45:in'visit' #/home/docker/.gem/ruby/2.3.0/gems/capybara-2.6.2/lib/capybara/session.rb:232:在“访问”中 #/home/docker/.gem/ruby/2.3.0/gems/capybara-2.6.2/lib/capybara/dsl.rb:51:in'block(2层)in' #./spec/example_test.rb:31:in'block(2层)in'
有什么想法吗?我错过了什么

更新 明白了

def设置
url='1〕http://selenium.hub.docker/wd/hub'
capabilities=Selenium::WebDriver::Remote::capabilities.firefox
Capybara.app_host=“http://{ENV['app_host']}”
Capybara.run_server=false
Capybara.register_驱动程序:远程浏览器do|应用程序|
水豚::硒::Driver.new(
应用程序,
:browser=>:远程,
url:url,
期望的功能:功能
)
结束
Capybara.default\u driver=:远程\u浏览器
Capybara.javascript\u驱动程序=:远程\u浏览器
结束
除了将
Capybara.run\u server=false
http://
前置到app\u主机之外,该键还在url上指定
/wd/hub


工作解决方案。

对于水豚设置,您需要担心以下几件事-

1-水豚连接到浏览器的位置-在大多数情况下,它是本地的,但您使用的是远程的,并且您似乎已经正确配置了它

2-浏览器尝试连接到的位置-其基本url由Capybara.app_host设置-因此Capybara.app_host=“http://-您将其设置为ENV['app_host',设置为app.under.test-我假设这是一个ip/域名,解析为运行Capybara的机器上的可访问接口


3-当Capybara绑定正在测试的应用程序时-这是通过Capybara.server_主机和Capybara.server_端口设置的-server_主机默认为127.0.0.1,端口是随机选择的。这很可能是问题所在,因为运行Capybara的机器上的127.0.0.1通常无法从其他机器访问。您需要更改它要成为与来自#2的app.under.test匹配的外部可用ip。如果防火墙配置需要,您可能还需要设置端口。

谢谢您的建议。我不确定是否遵循,但我想我可能需要澄清一些问题。Capybara正在存放测试的
rspec
图像上运行。我想要这些测试ts针对可在URI
app.test
下访问的app
web
执行。这是否回答了您关于ENV['app\u HOST']的问题?因此,您没有让Capybara运行正在测试的应用程序?在这种情况下,您应该设置
Capybara.run\u server=false
-还有Capybara.app\u HOST sho