在Docker中使用水豚和无头selenium浏览器的Rails系统testing
TL; DR:有关如何正确configuration水豚能够使用默认的Rails minitest系统testing来驱动docker容器中的远程selenium浏览器的任何想法?
我正在dockerized环境中运行Rails ..现在我想开始一些“系统testing”,但是因为我在Docker中运行,所以我想出了一些问题。
我正在使用默认testing套件(minitest?)与capybara
和selenium-webdriver
gem。
我已经使用以下方法在容器中安装了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