我正在用calabash编写一些测试,并尝试在帮助器类中使用页面函数。
我有我的步骤文件
Given /^I am on my page$/ do
mypage = page(MyPage)
MyPageHelper.DoMultiActionStep()
end
我的页面文件
class MyPage < Calabash::ABase
def my_element_exists
element_exists(MY_ELEMENT_QUERY)
end
end
我的帮助文件
class MyPageHelper
def self.DoMultiActionStep
mypage = page(MyPage)
mypage.do_action_one
mypage.my_element_exists
end
end
当我运行此操作时,我收到错误
MyPageHelper的未定义方法'page':Class(NoMethodError)
页面函数在步骤文件中工作正常,但它似乎从MyPageHelper类调用了一个问题。是否有可能做到这一点?是否需要添加一个using语句?
谢谢!
答案 0 :(得分:1)
我担心我不知道如何直接回答你的问题。
冒着被焚烧的风险,我建议采用另一种方法。
选项1: 如果您不需要辅助课程,请不要为此烦恼。
我意识到你的实际代码可能更复杂,但是你需要帮助吗?为什么不在MyPage类中实现do_multi_action_step
作为方法?
def do_multi_action_step
my_element_exists
my_other_method
end
选项2: 传递MyPage实例
在您的步骤中,您创建了一个MyPage实例。您应该使用该实例,而不是在MyPageHelper.do_multi_action_step
中创建新实例。
def self.do_multi_action_step(my_page)
my_page.my_element_exists
my_page.my_other_method
end
示例:强>
# my_page_steps.rb
Given /^I am on my page$/ do
# use the await method to wait for your page
my_page = page(MyPage).await
# pass an instance instead of creating a new one
MyPageHelper.do_multi_action_step(my_page)
# or just use a method on the MyPage instance
my_page.do_multi_action_step
end
# my_page_helper.rb
class MyPageHelper
# pass the page as an object
def self.do_multi_action_step(my_page)
my_page.my_element_exists
my_page.my_other_method
end
end
# my_page.rb
require 'calabash-cucumber/ibase'
class MyPage < Calabash::IBase
# some view that is unique to this page
def trait
"view marked:'some mark'"
end
def my_element_exists
element_exists("view marked:'foo'")
end
def my_other_method
puts 'do something else'
end
# why not do this instead?
def do_multi_action_step
my_element_exists
my_other_method
end
end