2016-04-05 6 views
0

Nach den Richtlinien des Buches von Geb hier: book of geb scheint es möglich zu sein, einfachen Zugang zu Formularelementen, wie Texteingabefelder usw. zu haben - nur den Namen verwendend.Geb Form-Control Shortcuts - Howto

Die Beispiele erwähnen jedoch kein vollständiges Beispiel, und ich kann nicht scheinen, es zur Arbeit zu bringen. Wie soll dieses Konstrukt aussehen?

Stellen Sie sich ein Modul mit einer bestimmten Basis - die Form, die sich selbst - und die Liste der Formelemente mit im Inhaltsbereich (angegeben über Namen) zu interagieren:

class MyFormModule extends Module { 
    static base = { $('form#myForm') } 
    static content = { 
     mytextfield { textfield.mytextfield } 
    } 
} 

Dies ist inspiriert von den „geb "Beispiel im Buch. Es funktioniert eindeutig nicht, da "Textfeld" keine gültige Eigenschaft ist.

Gibt es Abkürzungen für Dooing wie oben? - Ich muss Punkte im Namen haben können. (Ich weiß, ich kann einen Selektor schreiben - aber das ist eine Frage über "Form-Control-Shortcuts") ...

Antwort

1

Angenommen, Sie möchten, dass Ihre Inhaltsdefinition das Element textarea zurückgibt und nicht seinen Wert, dann müssen Sie verwenden ein Verfahren und keine Eigenschaft und vorausgesetzt, dass Ihr Element einen Punkt in seinem Namen hat man den Namen der Methode zu zitieren, weil ein Methodenname Aufruf einen Punkt enthalten:

class MyFormModule extends Module { 
    static base = { $('form#myForm') } 
    static content = { 
     mytextfield { "textfield.mytextfield"() } 
    } 
} 

da Geb. auch Verknüpfungen für die Einstellung und den Zugriff hat Werte von Elementen, die als Seiten- und Modulinhalte definiert sind (am Ende des Abschnitts, mit dem Sie verbunden sind, beschreiben) und die folgende Seitenklasse:

class MyPage extends Page { 
    static content = { 
     myform { module(MyFormModule) } 
    } 
} 

Anschließend können Sie wie folgt vorgehen:

go MyPage 
form.mytextfield = "foo" 
assert form.mytextfield == "foo" 

Zweitens können Sie Wert des Elements namens textfield.mytextfield direkt auf dem Modul zugreifen und eingestellt (ohne die Modulinhaltsdefinition) Formularsteuer Shortcuts:

go MyPage 
form."textarea.mytextfield" = "foo" 
assert form."textarea.mytextfield" == "foo" 
+0

Klingt genau wie das, was ich erwartet hatte, würde ich tun können - ich werde es ausprobieren und mit einigen Stimmen zurückkommen, wenn es funktioniert :) Danke für Ihre Antwort! – Hoof