我正在使用黄瓜红宝石框架,我们正在使用Capybara和SitePrism来驱动浏览器。
我有一种情况,如果发生错误,我想重试一系列步骤,所以我在SitePrism页面中添加一个逻辑方法来覆盖它,如下所示:
steps %Q{
When I click on the back button
And I enter my reference number
Then I am able to complete the action successfully
}
我发现的问题是,当达到这部分代码时,执行失败并执行:
undefined method `steps' for #<MySitePrismPage:0x000000063be5b0 @loaded=false> (NoMethodError)
我是否有办法在SitePrism页面中使用步骤?
谢谢!
答案 0 :(得分:0)
归功于Jonas Maturana Larsen&#39;在google group。类似的问题与另一个例子,但传递世界&#39;上课也为我解决了这个问题。
步骤在Cucumbers RbWorld模块中定义。
您需要从您创建的地方传递世界实例 TestRubyCallStep类。
在您的情况下,您可能实际上想要创建一个模块而不是一个模块 如果你只是需要一个地方来保持共享方法,那就上课。
class TestRubyCallStep include Calabash::Android::Operations def initialize(world) @world = world end def callMethod @world.step %Q{my customized steps in custom_step.rb} end end
执行步骤定义的上下文世界:)
试试这个:
Then /^I call a step from Ruby class "([^\"]*)"$/ do |world| testObj = TestRubyCallStep.new(self) testObj.callMethod end
答案 1 :(得分:0)
旧问题,但提供了答案
使用steps
作为方法调用被认为是反模式,并且在黄瓜中被弃用/删除。
强烈建议将常见行为提取到帮助程序模块/类中,然后在其上调用方法。
此外,您发现了。在黄瓜世界中运行,将所有黄瓜方法扩展到顶级DSL,因此只需调用steps
就可以了。而DSL永远不会混入任何SitePrism上下文中,因此您无法做到这一点。
TL; DR-不要做您想做的事情。做这样的事情。
module MyReusableHelper
def click_back
# verbose code here
end
def enter_reference_number
# verbose code here
end
def complete_action # Note this method name probably needs a rethink
# verbose code here
end
然后只需将该模块包含在需要的任何类中即可。
如果您还有其他疑问,请在此处询问,或者您是否确信官方GH页面上的帖子已损坏。