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)

クラスからページオブジェクトを使用する途中でいくつかの概念が欠落していることは確かですが、何が問題なのかわかりません。ここで何が悪いのか考えていただけませんか。

どうもありがとうございます!

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

ジャスティンは、クラスへの呼び出しがクラッシュする理由を見つけました。最終的なクラスコードの結果は次のとおりです。

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

なぜそれがうまくいかなかったのですか?2つの主な理由:

  • ブラウザオブジェクトをクラスに渡さなかった<==必須
  • 「on」メソッドのクラス<==REQUIREDにPageObject::PageFactoryを含めませんでした。

皆さんありがとう!

4

3 に答える 3

3

on(またはon_page)メソッドを使用するには、次の2つのことが必要です。

  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 に答える