1

LineItemsPage というページ オブジェクトがあります。

class LineItemsPage
  attr_accessor :add_line_item_button

  def initialize(test_env)
    @browser              = test_env[:browser]
    @action_bar           = @browser.div(:id => 'lineitems_win').div(:class => 'window-body').div(:class => 'actionbar')
    @add_line_item_button = @action_bar.img(:class => 'button add')
  end

  def method_missing(sym, *args, &block)
    @browser.send sym, *args, &block
  end

end

私はそれを次のように使用します:

When /^I click on Add Item and enter the following values:$/ do |table|
  @line_items_page = LineItemsPage.new(@test_env)
  @line_items_page.add_line_item_button.when_present.click
end

LineItemsPage クラスに次のようなものを追加して、クリックを抽象化する必要があるかどうか疑問に思っています。

def add_item
  self.add_line_item_button.when_present.click
end

そして、それを次のように使用します:

@line_items_page.add_item

特にPage ObjectまたはRuby全般に関して、ベストプラクティスを探しています。を使用してインターフェイスをカプセル化するのadd_item()は少し先のことだと思いますが、そうしないと将来遭遇する可能性のある問題に気付いていないのではないかと思います。

4

1 に答える 1

1

個人的には、実装を参照せずに、ページオブジェクトメソッドをドメイン言語にしようとしています。

以前は次のようなことをしてい@line_items_page.add_line_item_button.when_present.clickましたが、次のシナリオで問題が発生しました。

1)広告申込情報をボタンからリンクに変更しました。

2)広告申込情報を追加するプロセスが変更されました。たとえば、右クリックで完了したか、2段階のプロセスになりました(ドロップダウンを開いてから[行を追加]をクリックするなど)。

いずれの場合も、広告申込情報を追加するすべての場所を見つけて更新する必要があります。add_itemページオブジェクトメソッドにすべてのロジックがある場合は、1つの場所を更新するだけで済みます。

実装の観点から、Cheezyのページオブジェクトアクセサーは非常にうまく機能することがわかりました。ただし、画像ボタン(またはアプリのカスタムコントロール)の場合は、 PageObject::Accessorsモジュールにメソッドを追加します。または、それらが1回限りのコントロールである場合は、特定のページオブジェクトにメソッドを直接追加できます。

更新-いくつかの出発点に関するコメントへの返信:

私はあまり多くのドキュメントに出くわしていませんが、ここに役立つかもしれないいくつかのリンクがあります:

1)CheezyPageObjectプロジェクトwiki-開始するための簡単な例を示します

2)ページオブジェクトgemが最初に開始されたCheezyのブログ投稿。ここでの内容は、gemが現在どのように実装されているかを正確に示していない可能性があることに注意してください。ただし、彼が何を達成しようとしているのかを理解するための良い基盤になると思います。これにより、必要に応じてgemを開いて変更する必要があるときに、何が起こっているのかを理解しやすくなります。

于 2012-04-26T16:43:38.323 に答える