2016-12-02 6 views
0

私はcucumber/ruby​​/capybara/siteprismフレームワークを使用しており、現在テストページを実装していました。私はいくつかのページに1ページあたり20個以上のラジオボタンがある点に達しました。私はページオブジェクトモデルの静的要素としてそれらのすべてをマップすることに本当にメリットがあると思っていましたか?Capybaraを直接使用するのではなく、ページオブジェクトモデル(例:SitePrism)でラジオボタンを定義する利点はありますか?

私は、ステップの定義でラジオボタンのテキストを使用して、次のような方法で直接capybara 'choose'メソッドを呼び出すと、もっと便利なように思えますそれらの20+のラジオボタンの他​​に何もする、それはすべてちょうど私達が機能に渡しているパラメータを変更することで動作するはずです:

cucumber feature: 
    When I select that "I am over 18" 

capybara step: 
    When /^I select that "(.*)"$/ |option| 
     choose(option) 

siteprismようなページオブジェクトモデルで、私は実装が必要になると思うのに対し

element :over_18_button, :radio_button, "I am over 18" 
element :over_12_button, :radio_button, "I am over 12" 
etc x50times 
のような形式で、これらの要素をすべて独立して定義し、維持します。

これを使用するには、ページを作成して、要素を呼び出す必要があります。これは私のようには思えません。

siteprism step: 
    When /^I select that "(.*)"$/ |option| 
    case option 
     when 'I am over 18' 
      over_18_button.click 
     when 'I am over 12' 
      over_12_button.click 

は、私は1つのすべてのボタンに配列して「要素」または「セクション」を作成ことができると思いますが、その後、私たちはそれらを解析し、とにかくどこかに関連するいずれかをクリックして、余分なロジックを配置する必要がありますコードでは、それはすべてき​​ちんと行われ、余分なコードやcapybaraの '選択'メソッドでメンテナンスする必要はありませんでした。

この例では、Capybaraを使用する方が良い選択肢だと思いますか? ページオブジェクトモデルで 'ALL'ウェブ要素を定義する方がよい場合は、そのメリットは何ですか?可能性のあるメリットを生かすためにページオブジェクトコードを別の方法で行うことができますか?

PS:だけでなく、私は概念的にテストの構造が類似していることを推測すると「ページ・オブジェクト」、「ワチール」のタグを追加すると、ので、多分そのフレームワークを使用して、誰かが助けることができるだけでなく...

答えて

0

このような複雑なケースのステートメントは不要です。

When /^I select that I am over "(\d\d)"$/ |age| 
    @page_object.select_age(age) 

私はsite_prismに精通していません。ページオブジェクトにこの方法で

element(:age_button) { |age| browser.radio_button(text: "I am over #{age}") 

:マイwatir_drops宝石は、あなたがこのような同じパターンですべてを定義できます

def select_age(age) 
    age_button(age).set 
end 

我々はまた、代わりに、宣言を使用しての全体の長い議論に入ることができ命令的なステップのまた、ベスト・プラクティス・ページ・オブジェクトの使用法では、定義さビジネスロジックを達成するメソッドを呼び出すと、それらのメソッドは、要素定義やアクションを含むすべての実装を行います。

+0

私は、ページオブジェクト要素を定義するときにパラメーターを取得して渡す関数を持っていますが、その場合、 '@ page_object.select_age(age)'をカピバラやワイワイの方法を直接使用するのではなく、「選択(年齢)」のような新しい実装(新しい機能を作成し、要素を定義する必要性)なぜそれが良いアイデアになるのかわかりませんが、ページオブジェクトモデルで重要な点を見逃している可能性があります。 – mickael

+0

Page Objectパターンはいくつかの問題を解決します。1)ビジネスロジックからインプリメンテーションロジックを抽象化する(どのように対処するか)2)コードDRYを維持する(すべてを1か所で更新できる)3)メンテナンスを容易にするインテリジェントな組織(ページが変更されたときに、オブジェクト)。私はカピバラのベストプラクティスを話すことはできませんが、ワティールはこのような抽象化に適しているライブラリ(カピバラの枠組み)の多くです。 – titusfortner

関連する問題