在Docker中使用水豚和无头硒浏览器进行Rails系统测试

时间:2017-06-24 04:03:21

标签: ruby-on-rails selenium docker automated-tests integration-testing

TL; DR:关于如何正确配置capybara以便能够使用默认的Rails minitest系统测试在docker容器中驱动远程selenium浏览器的任何想法?

我在一个dockerized env中运行Rails。 现在我想开始一些"系统测试"但是因为我在Docker中运行,我想出了一些问题。

我使用默认测试套件(minitest?)与capybaraselenium-webdriver宝石。

我已经使用以下内容在容器中安装了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.

事实上,我不知道是否安装了 chrome 本身?
which chrome没有输出任何内容。
which chromium输出/usr/bin/chromium

我也试过xvfb但没有成功。

所以(因为我没有线索)我试图更进一步,实际上也使用了一个dockerized系统测试环境。

我从selenium找到了一些Docker图像。所以我在我的rails和数据库容器中运行了一个selenium-standalone-chrome容器(实际的docker-compose.yml I'm using is here

然后我找到了一些有关配置的有用信息,以便让capybara驱动远程 selenium浏览器。 我在互联网上找到的所有例子都使用了rspec,但由于我使用默认的minispec,我试图将capybara驱动程序改编为minispec,但我对如何操作以及在何处放置配置有一些疑问

对于系统测试,我猜测最佳位置是文件application_system_test_case.rb。我也发现了,我尝试了许多不同的水豚配置,最终得到了以下似乎最完整的(available here)

在那一刻,测试似乎表现良好,因为我没有错误,但总是失败。

在测试用例之前,无论是否调用驱动程序配置(我定义服务器主机和端口的setup_remote方法),它都会失败。

无论有没有通话,我都无法访问&#34;网站<#34; 错误(here is the screenshot
这是the test file I used。 (测试一些反应动态显示)

但是,我可以从主机的浏览器访问带有给定URL的selenium容器。两个容器都看到了彼此。 我在容器shell中做了一些ping。

以下有用的问题不适合我:
Dockerized selenium browser cannot access Capybara test url
How can I run headless browser system tests in Rails 5.1?

有关如何正确配置capybara以便能够使用默认Rails minitest系统测试在docker容器中驱动远程selenium浏览器的任何想法吗?

非常感谢。

1 个答案:

答案 0 :(得分:3)

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