Capybara + Selenium + Docker的困惑:远程Firefox挂起

时间:2018-10-12 06:58:15

标签: ruby selenium docker docker-compose hanami

我们一直很沮丧,试图弄清楚如何通过我们的Dockerized Ruby(Hanami)应用程序进行Selenium JavaScript测试。当然,对于不依赖JavaScript的规范示例,Capybara默认的Rack :: Test驱动程序就足够了,但是每一个现代应用都依赖JavaScript来做一件事情,而我们的应用也一样。

我已经在SO上阅读了一些答案,并开始在GitHub上搜索以寻找类似的随机项目,但是在这里,由于政治上越来越不可持续的时间,我们已经停下来了。

总结:

  1. 如果在同一rake调用中运行了 no 非JS规范,则我们可以成功运行使用JavaScript的功能规范。 (我们使用jbodah/minitest-tagz来过滤规范调用);
  2. 在运行我们的全部规格时,Firefox Marionette在运行启用JavaScript的示例时会挂起,并且其日志消息指示它没有应连接的IP地址。

我们只发现了非常有限的一组教程/演练,这些教程/演练显然是适用的,到2018年大部分时间都是徒劳的。我们最狂热地学习的两个是这样的

  1. Integration testing with dockerized Selenium and Capybara,作者:Ahmet Kizilay,2016年2月;和
  2. Dockerized Rails Capybara tests on top of Selenium,作者:Alfredo Motta,2016年5月。

很可能,或者至少是可能性,我们一直在误读或掩饰这些东西,这些东西现在正困扰着我们。还值得注意的是,在过去两年中,尤其是与网络相关的Docker内部似乎已经发生了重大变化,这可能与我们的问题有关。

我将以下文件的副本包含在Gist中,因为它们的合计太多,无法粘贴到此处:

  1. 00-Capybara-Selenium-Docker-confusion__readme.md:此问题说明;
  2. 01-docker-compose.yml:应用程序的docker-compose.yml文件;
  3. 02-run_tests.shscripts/run_tests.sh文件,用作command文件中指定的web容器运行的docker-compose
  4. 03-features_helper.rb:每个功能规格要求的“ spec / features_helper”;主要与硒设置有关;
  5. 04-Dockerfile:用于构建Dockerfile容器的web
  6. 05-join_as_member_spec.rb:在应用程序中执行JavaScript的功能规范之一;
  7. 06-focused_logfile.log:运行docker-compose up --exit-code-from web的终端输出,仅运行执行JavaScript的规范示例;
  8. 07-unfocused_logfile.log:通过运行相同的docker-compose调用并在所有规范中启用所有示例的终端输出(即,不受使用tag :focus的限制)。

对于所有有用的注释和/或指向现有工作测试设置的指针(无论使用何种框架,例如Rails),都将受到极大的赞赏。谢谢。

1 个答案:

答案 0 :(得分:0)

最后!我们以高度意外的方式解决了问题。以下是我们刚刚推送到项目存储库中的提交的文本(不包括静态分析报告模板)。感谢所有人的宝贵意见,尤其是/u/nyekks on Reddit

  

修复不是硒问题的硒问题

     
    

这条路很漫长,从那里到这里...

  
     

我们一直在追逐尾巴,几天没关系,试图弄清楚为什么我们的Selenium JavaScript测试显然破坏了Docker。最终,我们在Reddit,StackOverFlow和Gitter上发布了求助请求; (和引用)this Gist的所有变体。

     

结果发现问题并非(完全)存在于Selenium,Capybara,Docker和/或这三者之间的交互。 @mitpaladin最终发现了一个随机种子(15474),当通过TESTOPTS中传递给Rake的scripts/run_tests.sh环境变量指定该种子时,它将产生一个绿色条。那很有趣,但不一定直接有用。通过证明至少有(in(2 ** 333)-1)出现绿条的可能性为1,测试本身并不是无法挽回的破坏任何东西。 (但是,您使用本地彩票的机会要好得多。)当我们俩都进行进一步的在线研究时,@ mitpaladin再次出现,找到了多个this one之类的StackOverflow答案,这些答案直接使(中指)指向。 .. DatabaseCleaner的所有事物。公平地说,他们的自述文件lightly touches on是问题所在,但是,如果您还不知道这是您要查找的内容,即使您阅读了该书,也可能不会三思而后行。

     

DatabaseCleaner.strategy:transaction更改为:deletion可以正常工作;进行更改后,我们立即获得了绿色的奖励。 (DB_CLEANER_STRATEGY中定义了一个spec/spec_helper.rb常量,但是,以防万一,我们需要再次对其进行更改。)

     

现在,也许我们可以重新思考一下,在这个新通过的功能规范之后,我们想完成什么!这些天前。