2016-03-24 6 views
1

私はpage-object-gemとpopulate_page_withメソッドをdatamagic gemとともに使用しています。 テスト中のアプリケーションに複数のtext_fieldsがあり、値のsend_keysとsend_keys:tabが必要です。 text_field要素のデフォルトメソッドで値を設定すると、アプリケーションが動作しません。私はこれらのいずれかが発生キータイプフィールドを送信すると、次のようにはデフォルトでsend_keyを行うtext_field要素タイプを定義する方法です

私は、ページ・クラスでメソッドを消し:

class SampleThing 

    include PageObject 
    include PageObject::PageFactory 
    include DataMagic 

    text_field(:dos_start, :id => 'DOSStart') 
    text_field(:beg_page, :id => 'BegPage') 
    text_field(:end_page, :id => 'EndPage') 


    def populate_page(datakey) 
    my_data = data_for datakey 
    self.set_dos_start(my_data['dos_start']) 
    self.beg_page= my_data['beg_page'] 
    self.end_page= my_data['end_page'] 
    end 

    def set_dos_start(my_data) 
    self.dos_start_element.send_keys my_data 
    self.dos_start_element.send_keys :tab 
    end 
end 

をこれを乾燥し、カスタム要素の型を作成するためのより良い方法があること私はこれをページオブジェクトに定義することができ、本質的にpopuate_pageをコード化する必要はありませんか?

sendkey_field(:dos_start, :id => 'DOSStart') 

答えて

1

独自のコントロールとアクセサを作成するウィジェット機能を使用できます。ウィジェットを定義するとき、デフォルトでは、要素を返すメソッドが作成され、要素が存在するかどうかがチェックされます。ただし、accessor_methodsを使用して、ページオブジェクト(この場合はセッターメソッド)用に作成される追加のメソッドを定義することができます。

コントロールは次のように作成/登録されます。 setterメソッドを#{name}=とし、populate_page_withメソッドで使用できるようにします。

class SendkeyField < PageObject::Elements::TextField 
    def self.accessor_methods(accessor, name) 
    accessor.send(:define_method, "#{name}=") do |value| 
     self.send("#{name}_element").send_keys(value, :tab) 
    end 
    end 
end 

PageObject.register_widget :sendkey_field, SendkeyField, :text_field 

これはあなたの希望アクセサ与えるだろう:

class MyPage 
    include PageObject 

    sendkey_field(:dos_start, :id => 'DOSStart') 
end 

としてだけでなく、個別のフィールドを設定する機能:

page.dos_start = 'value' 

または内蔵populate_page_with方法使用:

page.populate_page_with(dos_start: 'value') 
+0

ありがとうこの詳細な答えは、これがまさに私が探しているものです – niartseoj