Ruby on rails 带子域的Selenium路由

Ruby on rails 带子域的Selenium路由,ruby-on-rails,docker-compose,capybara,selenium-chromedriver,Ruby On Rails,Docker Compose,Capybara,Selenium Chromedriver,我已经创建了一个docker compose文件,用于在容器中进行水豚测试。 我目前面临的问题是,我找不到路由lvh.me域子域的能力。当我将lvh.me添加到Selenium的hosts文件时,得到的结果与测试失败的结果相同。我可以用哪种方式向Selenium添加一些子域路由以接受子域,如{{user}}.lvh.me:3001 我的水豚配置 Capybara.register_driver :selenium do |app| Capybara.app_host = "http://0.

我已经创建了一个docker compose文件,用于在容器中进行水豚测试。 我目前面临的问题是,我找不到路由lvh.me域子域的能力。当我将lvh.me添加到Selenium的hosts文件时,得到的结果与测试失败的结果相同。我可以用哪种方式向Selenium添加一些子域路由以接受子域,如{{user}}.lvh.me:3001

我的水豚配置

Capybara.register_driver :selenium do |app|
  Capybara.app_host = "http://0.0.0.0:3001"
  Capybara.server_host = '0.0.0.0'
  Capybara.server_port = '3001'
  Capybara.always_include_port = true

  args = ['--no-default-browser-check', '--headless', '--start-maximized']
  caps = Selenium::WebDriver::Remote::Capabilities.chrome("chromeOptions" => {"args" => args})

  Capybara::Selenium::Driver.new(
      app,
      browser: :remote,
      url: "http://hub:4444/wd/hub",
      desired_capabilities: caps
    )
end

Capybara.configure do |config|
  config.default_driver = :rack_test
  config.javascript_driver = :selenium
end
和我的docker一起写文件

version: '3'
services:
  db:
    image: postgres
    volumes:
    - ./tmp/db:/var/lib/postgresql/data
  redis:
    image: redis
    volumes:
    - ./tmp/redis:/var/lib/redis/data
  web:
    build: .
    environment:
    - REDIS_URL=redis://redis
    - DATABASE_HOST=db
    command: sh "/myapp/docker-entrypoint.sh"
    volumes:
    - .:/myapp
    links:
    - db
    - redis
    - hub
    depends_on:
    - db
    - redis
    ports:
      - "3001:3001"
      - "3000:3000"
  hub:
    container_name: hub
    image: selenium/hub:3.9
    ports:
    - "4444:4444"
  selenium:
    container_name: selenium
    image: selenium/node-chrome:3.9
    environment:
      HUB_PORT_4444_TCP_ADDR: hub
      HUB_PORT_4444_TCP_PORT: 4444
    depends_on:
      - hub
    links:
      - hub

首先,您不应该在驱动程序注册中指定水豚配置。其次,这将假设您正在
web
docker实例上运行测试——如果您确实在主机上运行测试,那么情况将略有不同

Capybara.app\u host
需要设置一个URL,该URL从浏览器的角度指向正在测试的应用程序的运行位置。在您的情况下,浏览器正在
selenium
docker实例上运行,测试应该在
web
实例上启动AUT-这意味着
Capybara.app\u host
应该是
http://web
(不需要端口,因为您已经指定了
始终\u include\u port
)。这意味着你应该以

Capybara.register_driver :selenium do |app|
  args = ['--no-default-browser-check', '--headless', '--start-maximized']
  caps = Selenium::WebDriver::Remote::Capabilities.chrome("chromeOptions" => {"args" => args})

  Capybara::Selenium::Driver.new(
    app,
    browser: :remote,
    url: "http://hub:4444/wd/hub",
    desired_capabilities: caps
  )
end

Capybara.configure do |config|
  config.app_host = "http://web"
  config.server_host = '0.0.0.0'
  config.server_port = '3001'
  config.always_include_port = true

  config.default_driver = :rack_test
  config.javascript_driver = :selenium
end
您的下一个问题是您希望使用哪个
lvh.me
解析为
127.0.0.1
,但您需要它解析为分配给
web
docker实例的任何ip。如果您在测试中使用了固定数量的子域,您应该能够通过
selenium
docker实例配置中指定的
link
别名来处理,或者如果您在docker compose配置中指定了网络,则可以通过网络别名来处理。如果您确实需要解析通配符(*.lvh.me),那么您需要运行自己的DNS服务器(可能在docker设置中),并使用通配符CNAME条目解析
*.lvh.me
web