2016-06-01 16 views
2

I erstellt separate Klasse für eine Login-Seite wie unten:Geb: Set Text in einem Eingabefeld

class LoginPage extends Page{ 
     static at = { title == "XXX" } 
     static content = { 
     username(wait:true) { $(By.xpath('//input[@name="mailAddress"]'))} 
     password(wait:true) { $(By.xpath('//input[@name="password"]'))} 
    }  
} 

Und nun die Benutzername und das Passwort von einer anderen Klasse abgelegt Zugriff mit dem folgenden Code genannt HomePageLogin:

Browser.drive { 
    to LoginPage 
    at LoginPage  
    report "AtLoginPage"  
    username.value("username") 
    password.value("password") 
} 

Aber immer folgende Fehlermeldung:

Caught: groovy.lang.MissingPropertyException: No such property: username for  class: MyPackage.HomePageLogin 
groovy.lang.MissingPropertyException: No such property: username for class:  MyPackage.HomePageLogin 
at MyPackage.HomePageLogin$_run_closure1.doCall(HomePageLogin.groovy:18) 
at MyPackage.HomePageLogin$_run_closure1.doCall(HomePageLogin.groovy) 
at geb.Browser.drive(Browser.groovy:1061) 
at geb.Browser$drive$0.callStatic(Unknown Source) 
at geb.Browser.drive(Browser.groovy:1031) 
at geb.Browser$drive.call(Unknown Source) 
at MyPackage.HomePageLogin.run(HomePageLogin.groovy:12) 

Wie kann ich den Benutzernamen gesetzt und Passwort?

kann ich den Namen und das Kennwort in HomePageLogin Klasse mit folgendem Code ein:

Browser.drive { 
    to LoginPage 
    at LoginPage  
    report "AtLoginPage"  
    $("input",name:"mailAddress").value("ID") 
    $("input",name:"password").value("pass")  
} 

Aber ich will nicht, Inline-Scripting. Ich möchte, dass die Elemente über die entsprechende Klasse, die in diesem Fall LoginPage ist, definiert und aufgerufen werden können.

Antwort

1

Wenn die $("input",name:"") Selektoren arbeiten, versuchen die in der Seite Objekt, wie diese setzen:

class LoginPage extends Page { 
    static at = { title == "XXX" } 
    static content = { 
     username(wait:true) { $("input",name:"mailAddress") } 
     password(wait:true) { $("input",name:"password") } 
    }  
} 
+0

Wenn ich von XPath komplexe Elementauswahl benötigen, wie ich XPath verwenden sollte als? –

+0

Sie können [Xpath-Selektoren] (http://www.gebish.org/manual/current/#using-webdriver-s-code-by-code-class-selectors) verwenden, aber ich denke, dass Ihr Xpath in diesem Fall war aus irgendeinem Grund falsch. –

+0

Ich verifizierte meinen XPath mit Firebug im Firefox-Browser und es war OK. Deshalb war ich verwirrt. Suchen Sie weiterhin nach einer Problemumgehung für die Verwendung von XPath anstelle von JQuery-Selektor. –