在Docker中使用水豚和无头selenium浏览器的Rails系统testing

TL; DR:有关如何正确configuration水豚能够使用默认的Rails minitest系统testing来驱动docker容器中的远程selenium浏览器的任何想法?

我正在dockerized环境中运行Rails ..现在我想开始一些“系统testing”,但是因为我在Docker中运行,所以我想出了一些问题。

我正在使用默认testing套件(minitest?)与capybaraselenium-webdrivergem。

我已经使用以下方法在容器中安装了chromedriver数据包:

 RUN apt-get install -y chromedriver \ && ln -s /usr/lib/chromium-browser/chromedriver /usr/local/bin 

但运行rails test:system输出以下错误Selenium::WebDriver::Error::WebDriverError: Unable to find chromedriver.

事实上,我不知道本身是否安装?
which chrome输出什么。
which chromium输出/usr/bin/chromium

我也试过用xvfb没有成功。

所以(因为我没有任何线索),我试图进一步去实际去dockerized系统testing环境。

我从selenium中发现了一些Docker镜像。 所以我在我的rails和数据库容器中运行了一个selenium-standalone-chrome容器( 我使用的是实际的docker-compose.yml )

然后,我发现一些有用的信息,关于configuration要让水豚驱动程序的远程selenium浏览器。
我在互联网上find的所有例子都使用rspec,但是因为我使用了默认的minispec,所以我尝试将capybara驱动程序改为minispec,但我对如何执行configuration以及在何处放置configuration有疑问。

对于系统testing,我猜想最好的位置是文件application_system_test_case.rb 。 此外,我发现,我尝试了许多不同的水豚configuration,我结束了以下似乎是最完整的(在这里可用)

在那个时候,testing似乎performance良好,因为我没有错误,但总是失败。

无论在setup_remote调用驱动程序configuration( setup_remote方法,我在其中定义了服务器主机和端口),它都会失败。

有或没有电话我得到了“网站无法到达”的错误( 这里是截图 )
这是我使用的testing文件 。 (testing一些反应dynamic显示)

不过,我可以从我的主机访问来自浏览器的给定URL的selenium容器。 两个容器都可以看到对方。 我在容器shell里做了一些ping。

下面这些有帮助的问题不适合我:
Dockerizedselenium浏览器不能访问Capybaratestingurl
我如何在Rails 5.1中运行无头浏览器系统testing?

任何想法如何正确configuration水豚能够驱动在默认的Rails minitest系统testingdocker容器中的远程selenium浏览器?

非常感谢你。

您必须重写主机方法,以便Capybara使用容器的IP地址。 看看这个post: https : //medium.com/@pacuna/using-rails-5-1-system-tests-with-docker-a90c52ed0648