0

我正在用葫芦编写一些测试,并尝试在辅助类中使用页面函数。

我有我的步骤文件

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:Class (NoMethodError) 的未定义方法“页面”

页面函数在步骤文件中工作正常,但似乎从 MyPageHelper 类调用时出现问题。是否有可能做到这一点?是否有我需要添加的 using 语句?

谢谢!

4

1 回答 1

1

恐怕我不知道如何直接回答你的问题。

冒着被激怒的风险,我推荐一种替代方法。

选项1: 如果您不需要助手类,请不要打扰它。

我意识到您的实际代码可能更复杂,但是您需要这里的帮助程序吗?为什么不在do_multi_action_stepMyPage 类中作为方法实现呢?

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
于 2014-07-02T01:02:39.493 回答