是否可以在类中使用页面函数?

时间:2014-06-30 14:37:27

标签: ruby calabash calabash-ios

我正在用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语句?

谢谢!

1 个答案:

答案 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