在Rails中,当我们使用水豚和硒时,默认情况下,它们为我们的rails应用程序运行机架服务器,我们可以在不运行实际应用程序的情况下对其进行测试。
所以让我解释一下它是什么意思:
因此,当我们为 Rails 配置 Capybara Rspec 和 Selenium 时,就不需要单独运行您的 Rails 服务器,当我们运行规范时,当我们访问规范中应用程序的任何 URL 时,它就可以工作了。 它的发生是因为它在后台创建了一个机架服务器。
现在我使用Selenoid而不是Selenium,但机架服务器无法正常工作。那么 Selenoid 是否仅适用于远程 URL 并且不创建任何机架应用程序?
如果需要任何其他信息,请告诉我。
谢谢!
Selenoid是Selenium网格的替代品,并管理您用于测试的浏览器实例。它与运行受测应用程序无关。
您遇到的问题是 Capybara 在您运行测试的机器上运行应用程序,但是当使用 selenoid 时,浏览器在其他机器(容器(上运行。这意味着当Capybara启动应用程序并告诉浏览器访问https://localhost:<some port>/some/path
时,localhost
引用对于在其他机器上运行的浏览器不再正确。要更正此问题,您需要将Capybara.app_host
设置为运行测试的 url,从运行浏览器实例的计算机/容器中可以看到。根据容器网络的确切配置方式,您还需要修复Capybara用于运行应用程序的端口或指定Capybara.always_include_port
选项。
Capybara.app_host = "http://local_machine_as_seen_from_containers"
Capybara.always_include_port = true
或
Capybara.server_port = 1234 # some port number
Capybara.app_host = "http://local_machine_as_seen_from_containers:#{Capybara.server_port}"