Docker 中使用 capybara 和 headless selenium 浏览器进行 Rails 系统测试

2024-01-03

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 浏览器,您有什么想法吗?

非常感谢。


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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Docker 中使用 capybara 和 headless selenium 浏览器进行 Rails 系统测试 的相关文章

随机推荐

  • SSIS 表达式生成器:将日期/时间转换为纪元时间戳

    我正在尝试构建一个表达式 将日期 时间参数转换为将在 Url 参数字符串中使用的纪元时间戳 我想我会尝试GetDate 首先 然后替换实际参数 Package endingDate 这个语法 DATEDIFF s 19700101 GETD
  • MediaWiki,尝试调查 VisualEditor“联系 Parsoid/RESTBase 服务器时出错 (HTTP 500)”

    很多人由于多种不同的原因而遇到相同的错误 因此 在尝试作曲家更新后 我尝试从浏览器开始调查它并逐步重建正在发生的事情 这对我来说真的很难 我非常感谢 PHP 开发人员的帮助 From Chrome Developer Tools I cou
  • 在 Android 应用程序中获取 Google 的搜索结果

    在我的 Android 应用程序中 我想从用户那里获取搜索查询 并使用该查询搜索 google 获取搜索结果并使用搜索结果填充列表 自定义搜索 API 每天的免费搜索次数限制为 100 次 那么有没有其他的搜索方法呢 这是你可以使用的东西
  • 使用普通 Javascript 隐藏所有带有类的元素

    我通常使用document getElementById id style display none 通过 Javascript 隐藏单个 div 是否有一种类似简单的方法来隐藏属于同一类的所有元素 我需要一个不使用 jQuery 的简单
  • 向同一台计算机上的多个客户端发送多播消息

    我正在尝试编写一个服务器 服务 它每秒左右在局域网上广播一条消息 有点像服务发现 该消息需要由以下人员接收 多个客户端程序可能是 在同一台机器上或不同的机器上 机器 但可能不止 每台机器上运行一个程序 同一时间 我正在使用 delphi 7
  • 使用Python提取嵌套括号中的句子

    我有多个 txt目录中的文件 这是一个示例one of my txt files kkkkk select xx xE PUT xx xxxx jdfjhf jhfjj from xxxx x xx L quit 1 xxxxx FROM
  • 有没有办法强制 mongodb 将某些索引存储在 ram 中?

    我有一个具有相对较大索引的集合 但小于可用内存 并查看该集合上 find 的性能以及 htop 给出的系统中的可用内存量 似乎 mongo 没有在内存中存储完整索引 有没有办法强制 mongo 将这个特定索引存储在内存中 查询示例 gt d
  • 如何在 SQL Server 中包含可选的空参数

    我想创建一个存储过程 它在过程的 WHERE 部分有一个可选参数 我的 C 代码可以为此过程传入 null 或有效的产品 ID 这里是 declare ProductID int set ProductID null select from
  • 等待可重入锁中的条件

    以下代码摘自Java文档的Condition http docs oracle com javase 1 5 0 docs api java util concurrent locks Condition html class Bounde
  • 我怎样才能用maven看到jboss控制台

    我用maven2启动了jboss 5 1 0 GA服务器 是否有可能我可以看到控制台中发生了什么 我正在使用 eclipse 插件来运行 Maven 是否可以在 eclipse 或其他地方看到控制台 这就是我所说的控制台的意思 是否可以在某
  • 如果响应为404,如何使用Service Worker缓存跨域资源?

    w3 6 2 跨源资源和 CORS 应用程序倾向于缓存来自 CDN 或其他来源的项目 可以直接使用请求其中许多
  • CGPDF iPhone/iPad 内存问题

    多年来 我一直在努力尝试为 iPhone iPad 制作一个可用的 PDF 阅读器 但它永远不会停止消耗内存 看来所有用CGContextDrawPDFPage绘制的页面都被内部缓存起来 永远不会释放 我不是唯一一个遇到这个问题的人 htt
  • 临时表列列表 (MySQL)

    我需要在 MySQL 中获取某些临时表 MyISAM 的列表列 例如number column name column 我需要知道具有特定名称的列数 事先 我不知道列数是多少 我正在使用动态 sql 和一些变量来创建临时表 我不能使用sho
  • 多重矩阵乘法

    在 numpy 中 我有一个 N 3x3 矩阵的数组 这是我如何存储它们的示例 我正在抽象内容 N 10 matrices np ones N 3 3 我还有一个 3 向量数组 这是一个例子 vectors np ones N 3 我似乎无
  • 失败:Microsoft.AspNetCore.SpaServices[0]

    Asp net core 2 1 Angular 6应用程序 在我的Start cs文件 我们有 app UseSpa spa gt To learn more about options for serving an Angular SP
  • 函数/函子作为模板参数。它们可以存储吗?

    想象我有以下自由函数和函子 void myFreeFunction void cout lt lt Executing free function lt lt endl struct MyFunctor void operator void
  • Java - 调用屏幕键盘

    我正在开发的应用程序将在Windows 7上运行 它将用于通过触摸屏输入一些信息 每当提示用户输入信息时 我需要弹出一个屏幕键盘 我的问题是 我应该从头开始创建一个键盘类还是应该使用 Windows 7 内置屏幕键盘以及如何在 Java 应
  • 具有非标量输出的 Numpy 矢量化函数

    我正在尝试对输出列表的函数进行矢量化 我希望将 numpy 列表中的所有值提供给它 并让它返回一个矩阵 这样每一行都是输入向量中元素的输出 import numpy as np def func x n o for i in range n
  • uiautomator - 当我验证每个列表项中的文本时,无法让 ListView 滚动。当我点击屏幕上的最后一个项目时,它就失败了

    我正在尝试验证 ListView 中每个列表项中的文本 并逐一向下滚动 以便我可以验证每个列表项 但由于某种原因 我无法让它继续滚动列表来验证每个元素 有没有人有幸自动化这种操作 这是我能做到的最接近的 如果这还不够 请告诉我 UiScro
  • Docker 中使用 capybara 和 headless selenium 浏览器进行 Rails 系统测试

    TL DR 关于如何正确配置 capybara 以便能够使用默认的 Rails minitest 系统测试在 docker 容器中驱动远程 selenium 浏览器 您有什么想法吗 我在 dockerized 环境中运行 Rails 现在我