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

San*_*kai 5 selenium integration-testing automated-tests ruby-on-rails docker

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

我正在dockerized环境中运行Rails。现在,我想开始一些“系统测试”,但是由于我是在Docker内部运行的,所以我遇到了一些问题。

我正在使用默认的测试套件(最小?)capybaraselenium-webdrivergems。

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

RUN apt-get install -y chromedriver \
  && ln -s /usr/lib/chromium-browser/chromedriver /usr/local/bin
Run Code Online (Sandbox Code Playgroud)

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

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

我也尝试了xvfb没有成功。

因此(由于我一无所知),我尝试了更进一步,实际上也使用了dockerized系统测试环境。

我从硒中找到了一些Docker映像。所以我在Rails和数据库容器中运行了一个selenium-standalone-chrome容器(我正在使用的实际docker-compose.yml在此处

然后,我发现了一些有关配置的有用信息,以使capybara驱动程序成为远程硒浏览器。
我在互联网上找到的所有示例都使用rspec,但是由于我使用的是默认的minispec,因此我尝试使capybara驱动程序适应minispec,但我对如何执行以及将配置放在何处有些疑问。

对于系统测试,我猜测最好的位置是文件application_system_test_case.rb。我也发现了,并尝试了许多不同的水豚配置,最后得到以下似乎最完整的配置(可在此处获得)

那时测试似乎表现良好,因为我没有错误,但始终失败。

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

无论有无通话,我都收到“无法访问站点”错误(这是屏幕截图),
这是我使用的测试文件。(测试一些反应动态显示)

但是,我可以从主机上的浏览器访问具有给定URL的硒容器。并且两个容器都可以看到对方。我在容器外壳中执行了一些ping操作。

下列有帮助的SO问题对我不起作用:
Dockerized硒浏览器无法访问Capybara测试URL
如何在Rails 5.1中运行无头浏览器系统测试?

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

非常感谢你。

pac*_*una 5

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