在一个 Geb 测试中使用多个页面对象
Using multiple page objects in one Geb test
我正在尝试使用 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")}
}
}
测试规范。这是转到登录页面的基本测试,输入用户凭据,单击登录按钮,等待主页上的元素,然后验证您是否在主页上。
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
}
}
当我运行测试时,我得到以下错误
Caused by: groovy.lang.MissingPropertyException: Unable to resolve
tile1 as content for Pages.loginPage, or as a property on its
Navigator context. Is tile1 a class you forgot to import?
它正在 loginPage 而不是 homePage 中寻找 tile1。
在测试中更改 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")}
}
}
测试规范:
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()}
}
}
修改 LoginPage 页面对象为
loginButton(to: HomePage) {$("#loginButton")}
这会将范围切换到 HomePage 页面对象,并且 tile1 出现在那里
基本用法,无错误+重定向:
loginButton.click()
万一 #loginButton 触发了错误,没有重定向,那么像这样重载 loginButton 调用:
高级用法,错误 + 无重定向:
loginButton(LoginPage).click()
我正在尝试使用 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")}
}
}
测试规范。这是转到登录页面的基本测试,输入用户凭据,单击登录按钮,等待主页上的元素,然后验证您是否在主页上。
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
}
}
当我运行测试时,我得到以下错误
Caused by: groovy.lang.MissingPropertyException: Unable to resolve tile1 as content for Pages.loginPage, or as a property on its Navigator context. Is tile1 a class you forgot to import?
它正在 loginPage 而不是 homePage 中寻找 tile1。
在测试中更改 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")}
}
}
测试规范:
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()}
}
}
修改 LoginPage 页面对象为
loginButton(to: HomePage) {$("#loginButton")}
这会将范围切换到 HomePage 页面对象,并且 tile1 出现在那里
基本用法,无错误+重定向:
loginButton.click()
万一 #loginButton 触发了错误,没有重定向,那么像这样重载 loginButton 调用:
高级用法,错误 + 无重定向:
loginButton(LoginPage).click()