Rails和Selenium:如何在浏览器中停止/暂停执行测试?

时间:2012-06-20 07:44:39

标签: ruby-on-rails selenium bdd

我正在努力(但非常有趣的时候)使用Cucumber,RSpec,Selenium和Rails进入行为驱动开发。

我已准备好使用Selenium进行测试,看看Firefox弹出并在我的场景中自动运行会很有趣。但我想做的一件事是暂停或停止执行某一点,所以我可以检查Selenium在某一点看到的内容。

我知道save_and_open_page命令,但这只显示了没有格式化的纯HTML。那么也许有一种stop_execution方法可以阻止Selenium 而不用关闭浏览器?

7 个答案:

答案 0 :(得分:26)

安装pry,然后将binding.pry放入您希望暂停的测试中。完成后,按 Ctrl + D 或在打开的REPL中键入exit以继续执行。

答案 1 :(得分:18)

或只是:

 visit '/'
 sleep(inspection_time=5)
 visit '/dreamland'

答案 2 :(得分:1)

使用调试器,执行stop/pause

在Selenium IDE中,您可以右键单击命令行,然后选择设置/清除起点stop/pause执行。

答案 3 :(得分:1)

好的,我通过安装ruby-debug19(用于Ruby 1.9.3),然后在Cucumber步骤中的某处设置断点来实现它。

http://rails.vandenabeele.com/blog/2011/12/21/installing-ruby-debug19-with-ruby-1-dot-9-3-on-rvm/

另一个选择是使用Capybara-firebug gem,它添加了一个“Then stop and let me debug”步骤,它基本上似乎也是这样(我不知道它是否依赖于ruby-debug gems)。 / p>

答案 4 :(得分:1)

所有答案都需要安装新的宝石,甚至设置睡眠,这不是最好的方法。您可以将此行放在您的任何位置:

ask "Continue?"

在您输入y(是)

之前,它将停止执行

所以,例如它看起来像这样:

expect(page).to have_button('Submit')
ask "Continue?"
click_button('Submit')

答案 5 :(得分:1)

您可以使用byebug来执行此操作,而无需在rails 5或更高版本中安装任何gem。只需在要暂停测试的行上键入byebug

示例:

visit post_url(id: posts(:one).id)
byebug
click_on "...", match: :first

这样做将在加载新页面之后但在单击下一个按钮之前暂停测试。如果使用旧版本的rails,则可能必须安装byebug gem,但它对于故障排除很有用,我建议无论如何都要使用它。

答案 6 :(得分:0)

尝试使用selenium.sleep(ms) 这将使测试执行等待指定的时间