2016-03-24 12 views
1

Ich verwende die Methoden page-object-gem und populate_page_with zusammen mit dem Datamagic-Juwel. Ich habe mehrere text_fields in meiner Anwendung im Test, die send_keys eines Wertes und dann send_keys: tab benötigen. Die Anwendung funktioniert einfach nicht, wenn ich den Wert über die Standardmethode des text_field -Elements festlegen.gibt es eine Möglichkeit, einen text_field-Elementtyp zu definieren, der send_key als Standardeinstellung verwendet

Wenn ich eine dieser Begegnung Schlüsselart Felder sende I Stummel nur eine Methode in der Seitenklasse wie folgt:

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 

Gibt es einen besseren Weg, dies zu vertrocknen und eine Art benutzerdefiniertes Element erstellen, die würde es mir erlauben, dies im Seitenobjekt zu definieren und im Wesentlichen die Notwendigkeit zu beseitigen, die popuate_page auszucodieren?

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

Antwort

1

Sie können die Widget-Funktion verwenden, um Ihre eigenen Steuerelemente und Accessoren zu erstellen. Wenn Sie ein Widget definieren, erstellt es standardmäßig nur Methoden, um das Element zurückzugeben und zu prüfen, ob es vorhanden ist. Sie können jedoch die accessor_methods verwenden, um zusätzliche Methoden zu definieren, die für das Seitenobjekt erstellt werden - in diesem Fall eine Setter-Methode.

Das Steuerelement wird wie folgt erstellt/registriert. Beachten Sie, dass die Setter-Methode #{name}= aufgerufen werden soll, damit sie in der populate_page_with-Methode verwendet werden kann.

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 

Dies würde Ihnen die gewünschte Zugriffs:

class MyPage 
    include PageObject 

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

Neben der Möglichkeit, das Feld individuell einzustellen:

page.dos_start = 'value' 

oder den eingebauten in populate_page_with Methode:

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

Vielen Dank für Diese detaillierte Antwort, genau das suche ich – niartseoj