Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 4 在测试运行期间浏览_Ruby On Rails 4_Cucumber_Capybara_Selenium Chromedriver - Fatal编程技术网

Ruby on rails 4 在测试运行期间浏览

Ruby on rails 4 在测试运行期间浏览,ruby-on-rails-4,cucumber,capybara,selenium-chromedriver,Ruby On Rails 4,Cucumber,Capybara,Selenium Chromedriver,我在一个标准Cucumber/Capybara驱动的Rails应用程序中使用Webkit/Chromedriver 它工作得很好,当场景在无头模式下运行时,我可以看到浏览器在做什么 能够在场景的特定点在“受驱动”的chrome中点击会对我有很大帮助。对于咯咯笑,我在某个步骤中插入了一个byebug。此时,byebug控制台打开,Cucumber/Capybara明显停止,chrome坐在那里等待,直到我退出byebug控制台 如果我点击chrome窗口,它将无限期地挂起。原因很清楚=>此时,ch

我在一个标准Cucumber/Capybara驱动的Rails应用程序中使用Webkit/Chromedriver

它工作得很好,当场景在无头模式下运行时,我可以看到浏览器在做什么

能够在场景的特定点在“受驱动”的chrome中点击会对我有很大帮助。对于咯咯笑,我在某个步骤中插入了一个
byebug
。此时,byebug控制台打开,Cucumber/Capybara明显停止,chrome坐在那里等待,直到我退出byebug控制台

如果我点击chrome窗口,它将无限期地挂起。原因很清楚=>此时,chrome向我正在测试的应用程序发出了一个请求,因为它位于
byebug
,所以它无法处理该请求


我必须做什么才能使这项工作(如果可能的话)?我熟悉所有这些工作原理的架构(在正常操作中,当Capybara或Webkit驱动我的chrome时)。但是如果在场景中的某个时刻停下来,自己点击一下,那就太好了,因为这样我就可以节省大量的时间手动设置测试数据(包括浏览器会话和所有这些)。请注意,
byebug
对我来说并不重要,如果我可以在一个步骤中执行某个解决方案,该解决方案会让Cucumber无限期等待并将控制权交给我,那就足够了。

尝试在byebug控制台上调用
sleep 10


浏览器只能由一个进程“驱动”,调用sleep会释放chromedriver在浏览器上的抓地力(睡眠时间长度),因此您可以使用Web检查器或单击元素。

尝试在byebug控制台上调用
sleep 10


浏览器只能由一个进程“驱动”,调用sleep会释放chromedriver对浏览器的抓地力(在睡眠时间内),因此您可以使用Web检查器或单击元素。

我经常这样做,诀窍是将byebug或pry放入测试中。当执行停止时,只有测试过程被阻止,你可以像往常一样与网站交互,入口点是
current\u url
@phoet:有趣的是,我确实记得它曾经对我也有效,但在过去几天里,每当我尝试你(以及我自己)描述的内容时,每当新版本的byebug(及其相关库)发布时,这个问题就会不断出现。它通常归结为当byebug(或pry)中断测试时运行应用程序的线程被暂停。您可以尝试回滚到byebug的早期版本和/或在byebug提示符处列出线程,然后恢复运行应用程序的线程。我经常这样做,诀窍是将byebug或pry放入测试中。当执行停止时,只有测试过程被阻止,你可以像往常一样与网站交互,入口点是
current\u url
@phoet:有趣的是,我确实记得它曾经对我也有效,但在过去几天里,每当我尝试你(以及我自己)描述的内容时,每当新版本的byebug(及其相关库)发布时,这个问题就会不断出现。它通常归结为当byebug(或pry)中断测试时运行应用程序的线程被暂停。您可以尝试回滚到以前版本的byebug和/或在byebug提示符处列出线程,然后恢复运行应用程序的线程。这很有效。有一个问题(从2016年到2017年,断断续续)可能描述了问题的根源。我猜它挂在等待用户输入的阻塞I/O系统调用中。如果他们切换到
IO,这可能会有所帮助。选择基于
的I/O或其他类型,中间有小的
sleep
调用,而不是他们正在使用的
readline
调用。OTOH,如果
readline
能够自己完成这项工作就好了……这不是“释放chromedriver抓地力”(事实上它与chromedriver没有任何关系),只是当你在byebug中调用
sleep
时,它会取消所有线程的暂停,byebug暂停了一段睡眠时间,从而重新启用运行被测应用程序的线程,以便处理请求。@ThomasWalpole如果你是谁,你当然应该比我更了解。我只是觉得这个问题与Chrome远程调试协议有关,并且草率地解释了链接的答案。这很有效。有一个问题(从2016年到2017年,断断续续)可能描述了问题的根源。我猜它挂在等待用户输入的阻塞I/O系统调用中。如果他们切换到
IO,这可能会有所帮助。选择基于
的I/O或其他类型,中间有小的
sleep
调用,而不是他们正在使用的
readline
调用。OTOH,如果
readline
能够自己完成这项工作就好了……这不是“释放chromedriver抓地力”(事实上它与chromedriver没有任何关系),只是当你在byebug中调用
sleep
时,它会取消所有线程的暂停,byebug暂停了一段睡眠时间,从而重新启用运行被测应用程序的线程,以便处理请求。@ThomasWalpole如果你是谁,你当然应该比我更了解。我的印象是,这个问题与Chrome远程调试协议有关,只是草率地解释了链接的答案。