我正在尝试使用spock编写geb测试的基本日志。我创建了2个页面对象,一个用于登录页面,另一个用于登录后用于访问的页面。
登录页面
package Pages
import geb.Page
class loginPage extends Page {
static url = 'login/'
static at = {title == "Login to TalentBank"}
static content = {
logo {$(".center-img img")}
emailHeader {$(".form-group label", text:"Email")}
emailTextBox {$('#email')}
pwdHeader {$(".form-group label", text:"Password")}
pwdTextBox {$("#password")}
loginButton {$("#loginButton")}
}
}
主页
package Pages
import geb.Page
class homePage extends Page {
static at = {title == "Home"}
static content = {
tile1 {$("#page-container > div.container-fluid > div > div:nth-child(2) > div")}
}
}
TestSpec。这是进入登录页面,输入用户凭据,单击登录按钮,等待主页上的元素,然后验证您在主页上的基本测试。
import Pages.loginPage
import Pages.homePage
import geb.spock.GebReportingSpec
class loginPageSpec extends GebReportingSpec {
def "Log in to TalentBank Core"(){
given:
to loginPage
waitFor {loginButton.isDisplayed()}
when:
emailTextBox.value("Ruxin")
pwdTextBox.value("Test1234")
loginButton.click()
then:
waitFor {tile1.isDisplayed()}
at homePage
}
}
当我运行测试时,我收到以下错误
引起:groovy.lang.MissingPropertyException:无法解决 tile1作为Pages.loginPage的内容,或作为其上的属性 导航器上下文。 tile1是否是您忘记导入的类?
它在loginPage而不是homePage中查找tile1。
答案 0 :(得分:2)
更改测试中的at
位置,我还会添加页面参考,您将从自动完成中受益。
登录页面
package Pages
import geb.Page
class LoginPage extends Page {
static url = 'login/'
static at = {
title == "Login to TalentBank"
}
static content = {
logo {$(".center-img img")}
emailHeader {$(".form-group label", text:"Email")}
emailTextBox {$('#email')}
pwdHeader {$(".form-group label", text:"Password")}
pwdTextBox {$("#password")}
loginButton {$("#loginButton")}
}
}
主页
package Pages
import geb.Page
class HomePage extends Page {
static at = {
waitFor {title == "Home"} // Add waitFor here to verify on page
}
static content = {
tile1 {$("#page-container > div.container-fluid > div > div:nth-child(2) > div")}
}
}
TestSpec:
import Pages.LoginPage
import Pages.HomePage
import geb.spock.GebReportingSpec
class LoginPageSpec extends GebReportingSpec {
def "Log in to TalentBank Core"(){
given:
Page loginPage = to LoginPage
waitFor {loginPage.loginButton.isDisplayed()}
when:
loginPage.emailTextBox.value("Ruxin")
loginPage.pwdTextBox.value("Test1234")
and: "Click login"
loginPage.loginButton.click()
then: "Check at home page"
Page homePage = at HomePage
and:
waitFor {homePage.tile1.isDisplayed()}
}
}
答案 1 :(得分:0)
使用
修改LoginPage页面对象loginButton(to: HomePage) {$("#loginButton")}
这会将范围切换到HomePage页面对象,而tile1就在那里
基本用法,无错误+重定向:
loginButton.click()
以防#loginButton触发错误,没有重定向,然后像这样重载loginButton调用:
高级用法,错误+无重定向:
loginButton(LoginPage).click()