TL;DR:关于如何正确配置 capybara 以便能够使用默认的 Rails minitest 系统测试在 docker 容器中驱动远程 selenium 浏览器,您有什么想法吗?
我在 dockerized 环境中运行 Rails..
现在我想开始一些“系统测试”,但由于我在 Docker 中运行,所以我遇到了一些问题。
我正在使用默认的测试套件(minitest?)capybara
and selenium-webdriver
gems.
我已经安装了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
没有成功。
因此(因为我不知道)我尝试更进一步,实际上也使用了 Docker 化的系统测试环境。
我从 selenium 中找到了一些 Docker 镜像。所以我在我的 Rails 和数据库容器之间运行selenium-standalone-chrome
容器(实际我正在使用的 docker-compose.yml 在这里 https://gist.github.com/sanjibukai/1a97fd67183bef2a715bfda0380b0f43)
然后我找到了一些关于让水豚驱动程序需要进行的配置的有用信息remote硒浏览器。
我在互联网上找到的所有示例都使用 rspec,但由于我使用的是默认的 minispec,我尝试将水豚驱动程序调整为 minispec,但我对如何执行此操作以及将配置放在哪里有一些疑问。
对于系统测试,我猜测最好的位置是文件application_system_test_case.rb
。我还发现并尝试了许多不同的水豚配置,最终得到以下似乎是最完整的配置(可在此处找到) https://gist.github.com/sanjibukai/bfc5117221a006d4e6829e3e5a662388
在那一刻,测试似乎表现良好,因为我没有错误,但它总是失败。
无论调用驱动程序配置(setup_remote
我在测试用例之前定义服务器主机和端口的方法。
无论有没有电话,我都得到了“无法访问网站” error (这是屏幕截图 https://i.stack.imgur.com/FZMUy.png)
这是我使用的测试文件 https://gist.github.com/sanjibukai/c677a8e2db53d44fd6558b8b90a9dfb8。 (测试一些react动态显示)
不过,我可以从主机的浏览器中使用给定的 URL 访问 selenium 容器。并且两个容器都能看到对方。我从容器 shell 中执行了一些 ping 操作。
以下有帮助的问题对我不起作用:
Dockerized selenium 浏览器无法访问 Capybara 测试 url https://stackoverflow.com/questions/35081382/dockerized-selenium-browser-cannot-access-capybara-test-url
如何在 Rails 5.1 中运行无头浏览器系统测试? https://stackoverflow.com/questions/43813014/how-can-i-run-headless-browser-system-tests-in-rails-5-1
关于如何正确配置 capybara 以便能够使用默认的 Rails minitest 系统测试在 docker 容器中驱动远程 selenium 浏览器,您有什么想法吗?
非常感谢。