【发布时间】:2017-11-27 16:39:30
【问题描述】:
TL;DR:关于如何正确配置 capybara 以便能够在具有默认 Rails minitest 系统测试的 docker 容器中驱动远程 selenium 浏览器的任何想法?
我在 dockerized 环境中运行 Rails.. 现在我想开始一些“系统测试”,但由于我在 Docker 中运行,所以我遇到了一些问题。
我正在使用带有 capybara 和 selenium-webdriver gems 的默认测试套件(minitest?)。
我已经使用以下方法在容器中安装了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)
然后我发现了一些有用的信息,关于配置让水豚驱动 remote selenium 浏览器。
我在互联网上找到的所有示例都使用 rspec,但由于我使用的是默认的 minispec,因此我尝试将 capybara 驱动程序调整为 minispec,但我对如何执行此操作以及将配置放在哪里有些疑问。
对于系统测试,我猜最好的位置是文件application_system_test_case.rb。我还发现并尝试了许多不同的水豚配置,最终得到以下似乎是最完整的(available here)
此时测试似乎表现良好,因为我没有错误,但它总是失败。
无论在测试用例之前调用驱动程序配置(我定义服务器主机和端口的 setup_remote 方法),它都会失败。
无论是否拨打电话,我都会收到 “无法访问网站” 错误 (here is the screenshot)
这里是the test file I used。 (测试一些react动态显示)
但是,我可以从主机的浏览器中使用给定的 URL 访问 selenium 容器。两个容器都能看到对方。 我从容器外壳中执行了一些 ping 操作。
以下对我有帮助的 SO 问题对我不起作用:
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 浏览器的想法?
非常感谢。
【问题讨论】:
-
再次嗨..远程selenium的默认地址似乎是
http://172.18.0.2:4444/wd/hub/之类的地址。但是,当我使用浏览器从主机访问此 URL 时,它会重定向到以下页面http://172.18.0.2:4444/wd/hub/static/resource/hub.html。所以我试图把这个 URL 放在注册驱动程序部分。这次我遇到了其他一些硒错误。但最重要的是,在控制台错误中,我还得到了一些 "System Info",它显示了 selenium 站点显示的相同元数据,这意味着连接 rails->selenium 似乎运行良好。
标签: ruby-on-rails selenium docker automated-tests integration-testing