2016-06-01 79 views
2

我创建单独的类的登录页面,如下图所示:盖布:在输入栏设置文本

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"]'))} 
    }  
} 

现在访问来自名为HomePageLogin使用下面的代码另一个类提交的用户名和密码:

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

但得到以下错误:

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) 

如何设置的用户名和密码?

我可以HomePageLogin类下面的代码设置用户名和密码:

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

但我不想内嵌脚本。在这种情况下,我想通过相应的LoginPage类来定义和访问元素。

回答

1

如果$("input",name:"")选择工作,尝试把这些页面的对象,像这样:

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

如果我需要与XPath复杂元素的选择,我应该如何使用XPath比? –

+0

你可以使用[xpath selectors](http://www.gebish.org/manual/current/#using-webdriver-s-code-by-code-class-selectors),但我猜你的xpath在这种情况下是不正确的,出于某种原因。 –

+0

我在Firefox浏览器中用Firebug验证了我的XPath,并且没问题。这就是我困惑的原因。仍在搜索使用XPath替代JQuery选择器的解决方法。 –