2016-03-24 8 views
1

私はpage-object-gemを使用していて、text_fieldのセットが無限の出現回数を持つときにページ要素を定義する最良の方法を見つけようとしています。クローンされた行の要素定義ページ

ページのロードにHTMLは次のようである:

<div><input id="dx_1_code" value=""/> <input id="dx_1_dos" onblur="clone($(this),false)" value=""/></div>

次のように最後の入力のうちユーザタブは、新しい行がHTMLでインクリメントID値を用いてクローン化された場合:次のように

<div><input id="dx_2_code" value=""/> <input id="dx_2_dos" onblur="clone($(this),false)" value=""/></div> 
<div><input id="dx_3_code" value=""/> <input id="dx_3_dos" onblur="clone($(this),false)" value=""/></div> 

私の最初の試みは、私のクラスを定義することでした:

class SamplePage 
    include PageObject 
    include DataMagic 

    text_field(:dx_1, :id => "dx_1_code") 
    text_field(:dx_2, :id => "dx_2_code") 
    text_field(:dos_1, :id => "dx_1_dos") 
    text_field(:dos_2, :id => "dx_2_dos") 

end 

しかし、私はすばやく多くの冗長エントリで終わった。

要素の設定とpopulate_page_withメソッドの使用に関して未知数またはこのようなエントリを処理するより良い方法はありますか?

答えて

1

要素のインデックスが作成されるため、インデックス付きプロパティの候補になります。 indexed_propertyでは、エレメントにアクセスするときに番号が代入されるロケーターを定義できます。ページオブジェクトは、次のようになります。

class MyPage 
    include PageObject 

    indexed_property(:dx, [ 
    [:text_field, :code, {id: 'dx_%s_code'}], 
    [:text_field, :dos, {id: 'dx_%s_dos'}], 
    ]) 
end 

最初の2行は、使用して入力することになります。

page = MyPage.new(browser) 
page.dx[1].code = 'a' 
page.dx[1].dos = 'b' 
page.dx[2].code = 'c' 
page.dx[2].dos = 'd' 

は、残念ながら、インデックス付きプロパティを操作するpopulate_page_with方法のための組み込みの方法はありません。何かと同様に、あなたは何かをハックすることができます。 populate_page_withメソッドは、setterメソッドと同様に "element"メソッドを探します。あなた自身をページオブジェクトに追加することで、このメソッドを使用することができます。

class MyPage 
    include PageObject 

    indexed_property(:dx, [ 
    [:text_field, :code, {id: 'dx_%s_code'}], 
    [:text_field, :dos, {id: 'dx_%s_dos'}], 
    ]) 

    # Method for inputting the various dx code/dos values based on a Hash 
    def dx=(values) 
    values.each_pair do |index, fields| 
     fields.each_pair do |field, value| 
     dx[index].send("#{field}=", value) 
     end 
    end 
    end 

    # This is so that populate_page_with can check that the element is enabled/visible 
    def dx_element 
    dx[1].code_element 
    end 
end 

これは、あなたのキーがインデックスであり、値はそのインデックスのフィールド/値であり、ハッシュを送信することにより、populate_page_withを使用する能力を与えるだろう。これまでと同じページの入力は、次のように書くことができます:

page = MyPage.new(browser) 
page.populate_page_with(dx: { 
    1 => {code: 'a', dos: 'b'}, 
    2 => {code: 'c', dos: 'd'} 
}) 
関連する問題