1

我正在使用页面对象 gem。假设我有一个页面对象,features/bussines/pages/booking_page.rb例如:

class Booking

   include PageObject

   span(:txtFirstName,   :id => 'details_first_name')

end

...并且我使用位于以下位置的“工具”类features/support/tools.rb

class MyTools

  def call_to_page_object
    on Booking do |page|
       puts page.txtFirstName
    end
  end
end

...但是这种方法失败了,因为不允许从类调用对象:

undefined method `on' for #<Booking:0x108f5b0c8> (NoMethodError)

很确定我在使用类中的页面对象的过程中遗漏了一些概念,但没有意识到问题所在。你能告诉我这里可能出了什么问题吗?

非常感谢!

==============================

Justin 找到了调用类崩溃的原因。最终类代码结果:

class MyTools

  #Include this module so that the class has the 'on' method
  include PageObject::PageFactory

  def initialize(browser)
    #Assign a browser object to @browser, which the 'on' method assumes to exist
    @browser = browser
  end

  def getCurrentRewards
    on Booking do |page|
      rewards_text = page.rewards_amount
      rewards_amount = rewards_text.match(/(\d+.*\d*)/)[1].to_f
      puts "The current rewards amount are: #{rewards_amount}."
      return rewards_amount
    end
  end

end

以及对函数的调用:

user_rewards = UserData.new(@browser).getCurrentRewards

为什么它对我不起作用?两个主要原因:

  • 我没有将浏览器对象传递给类 <== REQUIRED
  • 我没有将 PageObject::PageFactory 包含在“on”方法的类 <== REQUIRED 中。

谢谢大家!

4

3 回答 3

3

要使用on(or on_page) 方法需要两件事:

  1. 可用的方法,这是通过包含PageObject::PageFactory模块来完成的。
  2. 有一个@browser变量(在类的范围内)是浏览器。

因此,您可以通过以下方式使您的 MyTools 类工作:

class MyTools
  #Include this module so that the class has the 'on' method
  include PageObject::PageFactory

  def initialize(browser)
    #Assign a browser object to @browser, which the 'on' method assumes to exist
    @browser = browser
  end

  def call_to_page_object
    on Booking do |page|
       puts page.txtFirstName
    end
  end
end

然后,您将调用您的 MyTools 类,例如:

#Assuming your Cucumber steps have the the browser stored in @browser:
MyTools.new(@browser).call_to_page_object
于 2012-11-20T17:36:35.843 回答
3

你想做什么?

你读过黄瓜和奶酪书吗?

页面应该在features/support/pages文件夹中。您也可以将页面需要的其他文件放在那里。

如果要on在类中使用方法,则必须将其添加到类中:

include PageObject

MyTools 类的代码在我看来应该在 Cucumber 步骤文件中,而不是在类中。

于 2012-11-20T16:51:52.060 回答
0

您的类应该使用extend关键字来访问特殊的类方法,例如span

class Booking
   extend PageObject
   span(:txtFirstName, :id => 'details_first_name')
end

我希望这行得通。

于 2012-11-20T17:06:21.153 回答