【问题标题】:Testing with Cucumber and Selenium: how can I see what it sees in the browser?使用 Cucumber 和 Selenium 进行测试:如何查看它在浏览器中看到的内容?
【发布时间】:2011-05-08 03:17:09
【问题描述】:
我正在使用 Cucumber 在 Rails 中测试一个场景,它返回说找不到要单击的编辑链接。如果我自己访问该页面,它就在那里。显然我做错了什么,但我看不到。
如果我在我的场景之前添加@selenium 标签,它会在 Firefox 中执行测试。但是我看到浏览器打开和关闭,除非它需要我的交互(比如确认删除),否则它会在我看到它在做什么之前就过去了。
有没有办法查看它在浏览器中看到的内容并逐步完成?
【问题讨论】:
标签:
ruby-on-rails
selenium
cucumber
【解决方案1】:
要查看特定时间点在浏览器中显示的内容,请将此步骤添加到您的场景中:
Then show me the page
您可能无法获得所有样式,这取决于。
您也可以尝试另一件事:添加如下所示的步骤:
Then /^I pause for a while$/ do
sleep 30
end
当页面显示在浏览器中时,您应该有 30 秒的时间查看页面。
【解决方案3】:
我通过实现Cucumber 步骤解决了它
Then /^Wait for keypress$/ do
STDIN.getc
end
与标签解决方案非常相似,但噪音较小。这样我就可以随时停止测试执行。
【解决方案4】:
如果您想查看 selenium 看到的内容,请将以下内容添加到您的功能中:
@leave_the_window_open
@javascript
Feature: The failing feature you want to click through
(...)
让它发挥作用。您在黄瓜加载路径中的某处需要以下Afterdefinition:
After('@leave_the_window_open') do |scenario|
if scenario.respond_to?(:status) && scenario.status == :failed
print "Step Failed. Press Return to close browser"
STDIN.getc
end
end
see an example here
瞧:现在浏览器窗口保持打开状态,直到您在控制台中按 Enter 键。您可以四处点击并检查所有内容。
【解决方案5】:
为什么不设置一个屏幕录制工具并在任何显示网络驱动程序上运行它?对我来说,这似乎是一个很好的低技术解决方案。
【解决方案6】:
我通常使用 ask 方法来暂停操作,以便查看发生了什么。当一切都暂停时,我将使用 Firebug 来探索这个问题。请参阅here 获取允许您使用 Firebug 和 Cucumber 来查看 CSS/JS 等的 gem。
询问方法示例:
res = ask('Where is that error coming from??')
如果某些东西看起来不正确但对返回值起作用,您也可以编写询问行以实际结束测试。
另一个选择是使用 ruby 调试器并检查所有正在运行的东西。 Here 是一个解释其工作原理的 SO 问题。
【解决方案7】:
使用 Ruby,您可以添加 pry-nav gem - https://github.com/nixme/pry-nav
将以下内容添加到您的 gemfile 中:
宝石“撬”
宝石'撬远程'
宝石“撬导航”
然后将“binding.pry”行添加到您要中断的步骤定义中
然后您可以使用 step,next,从命令行继续单步执行您的代码。您还可以获得控制台功能,例如。你可以评估表达式