如何在 运行 GEB SPOCK 中的任何测试脚本之前导航到同一页面
How to navigate to same page before running any test script in GEB SPOCK
我正在使用 geb spock 和 groovy 创建一个自动化脚本。在我的测试中 class 我有多个测试,我想在 运行 任何测试意义
之前导航到主页
- 登录应用程序并导航至主页(登录后默认页面为主页)。
- 点击 Link1。检查Page.navigate到主页
- 点击 Link2。检查页面。导航到主页
- 点击 Link3。检查页面。导航到主页...
我创建了一个方法并尝试在我的 geb 测试中重用它,但出现以下错误:
geb.error.PageInstanceNotInitializedException: Instance of page class pages.Test_HomePage has not been initialized. Please pass it to Browser.to(), Browser.via(), Browser.page() or Browser.at() before using it.
at geb.Page.uninitializedException(Page.groovy:521)
at geb.content.UninitializedPageContentSupport.getContent(UninitializedPageContentSupport.groovy:30)
at geb.content.PageContentSupport.propertyMissing(PageContentSupport.groovy:39)
at geb.Page.propertyMissing(Page.groovy:99)
at pages.Test_HomePage.clickOnHomePage(Test_HomePage.groovy:46)
at com.abc.vcctest.TestNavigationInitialTestSpec.Navigate to Home page of test portal(TestNavigationInitialTestSpec.groovy:44)
这是我的示例 geb 测试:
@TestMixin(GrailsUnitTestMixin)
class TestNavigationInitialTestSpec extends LoginBaseTestSpec {
@Shared
Test_HomePage test_HomePage = new Test_HomePage()
def cleanupSpec() {
browser.close()
}
def setup() {
}
def cleanup() {
}
def navigateToHomePage() {
Test_HomePage test_HomePage = at Test_HomePage
test_HomePage.clickOnHomePage()
at Test_HomePage
}
def "Navigate to Home page of test portal"() {
given:
HomePage homePage = at HomePage
when: "Click on Home tab/link"
navigateToHomePage()
test_HomePage.clickOnHomePage()
def crashDisplayed = test_HomePage.crashPageDisplayed()
then: "You are on Home Page"
!crashDisplayed || { at Test_HomePage }
}
def "Navigate to Change Password page of testportal"() {
given:
at Test_HomePage
when: "Click on Change Password"
test_HomePage.clickOnChangePassword()
Test_ChangePassword test_ChangePassword = at Test_ChangePassword
def crashDisplayed1 = test_ChangePassword.crashPageDisplayed()
then: "You are on Change Password Page"
!crashDisplayed1 || { at Test_ChangePassword }
at Test_ChangePassword
}
这是我的 Test_HomePage class:
class Test_HomePage extends HomePage2{
static url = '/home'
static at = {
waitFor(message:"The Test Portal title is missing."){driver.title == "Test Portal"}
}
static content = {
pageCrash(required: false, cache: false) { $("h1") }
homePageLink {
$("a[href = '/Link1']")
}
changePasswordLink{
$("a[href='/Link2']")
}
updateEmailLink{
$ ("a[href = '/Link3']")
}
}
void crashPageDisplayed() {
if (pageCrash.isDisplayed()) {
driver.navigate().back()
}
}
void clickOnHomePage() {
homePageLink.click()
}
void clickOnChangePassword(){
changePasswordLink.click()
}
void clickUpdateEmail(){
updateEmailLink.click()
}
}
我是 geb 和 spock 的新手,我可能犯了一个非常愚蠢的错误,但非常感谢任何帮助或建议以有效的方式实现这一点。
你应该让你的功能方法彼此独立,这样它们就可以按任何顺序调用。你为什么不把 to Test_HomePage
之类的东西放到你的 setup()
方法中?然后它会在每个特征方法的开始被调用。即使您在每个单一特征方法的 given:
块中执行此操作,您仍然需要 to
才能检查 at
。我认为你应该稍微研究一下 Geb 之书。顺便说一句,这就是错误消息试图向您解释的内容:
geb.error.PageInstanceNotInitializedException:
Instance of page class pages.Test_HomePage has not been initialized.
Please pass it to Browser.to(), Browser.via(), Browser.page() or Browser.at() before using it.
在 navigateToHomePage()
中,您的第一个命令因此应该是:
Test_HomePage test_HomePage = to Test_HomePage
我正在使用 geb spock 和 groovy 创建一个自动化脚本。在我的测试中 class 我有多个测试,我想在 运行 任何测试意义
之前导航到主页- 登录应用程序并导航至主页(登录后默认页面为主页)。
- 点击 Link1。检查Page.navigate到主页
- 点击 Link2。检查页面。导航到主页
- 点击 Link3。检查页面。导航到主页...
我创建了一个方法并尝试在我的 geb 测试中重用它,但出现以下错误:
geb.error.PageInstanceNotInitializedException: Instance of page class pages.Test_HomePage has not been initialized. Please pass it to Browser.to(), Browser.via(), Browser.page() or Browser.at() before using it.
at geb.Page.uninitializedException(Page.groovy:521)
at geb.content.UninitializedPageContentSupport.getContent(UninitializedPageContentSupport.groovy:30)
at geb.content.PageContentSupport.propertyMissing(PageContentSupport.groovy:39)
at geb.Page.propertyMissing(Page.groovy:99)
at pages.Test_HomePage.clickOnHomePage(Test_HomePage.groovy:46)
at com.abc.vcctest.TestNavigationInitialTestSpec.Navigate to Home page of test portal(TestNavigationInitialTestSpec.groovy:44)
这是我的示例 geb 测试:
@TestMixin(GrailsUnitTestMixin)
class TestNavigationInitialTestSpec extends LoginBaseTestSpec {
@Shared
Test_HomePage test_HomePage = new Test_HomePage()
def cleanupSpec() {
browser.close()
}
def setup() {
}
def cleanup() {
}
def navigateToHomePage() {
Test_HomePage test_HomePage = at Test_HomePage
test_HomePage.clickOnHomePage()
at Test_HomePage
}
def "Navigate to Home page of test portal"() {
given:
HomePage homePage = at HomePage
when: "Click on Home tab/link"
navigateToHomePage()
test_HomePage.clickOnHomePage()
def crashDisplayed = test_HomePage.crashPageDisplayed()
then: "You are on Home Page"
!crashDisplayed || { at Test_HomePage }
}
def "Navigate to Change Password page of testportal"() {
given:
at Test_HomePage
when: "Click on Change Password"
test_HomePage.clickOnChangePassword()
Test_ChangePassword test_ChangePassword = at Test_ChangePassword
def crashDisplayed1 = test_ChangePassword.crashPageDisplayed()
then: "You are on Change Password Page"
!crashDisplayed1 || { at Test_ChangePassword }
at Test_ChangePassword
}
这是我的 Test_HomePage class:
class Test_HomePage extends HomePage2{
static url = '/home'
static at = {
waitFor(message:"The Test Portal title is missing."){driver.title == "Test Portal"}
}
static content = {
pageCrash(required: false, cache: false) { $("h1") }
homePageLink {
$("a[href = '/Link1']")
}
changePasswordLink{
$("a[href='/Link2']")
}
updateEmailLink{
$ ("a[href = '/Link3']")
}
}
void crashPageDisplayed() {
if (pageCrash.isDisplayed()) {
driver.navigate().back()
}
}
void clickOnHomePage() {
homePageLink.click()
}
void clickOnChangePassword(){
changePasswordLink.click()
}
void clickUpdateEmail(){
updateEmailLink.click()
}
}
我是 geb 和 spock 的新手,我可能犯了一个非常愚蠢的错误,但非常感谢任何帮助或建议以有效的方式实现这一点。
你应该让你的功能方法彼此独立,这样它们就可以按任何顺序调用。你为什么不把 to Test_HomePage
之类的东西放到你的 setup()
方法中?然后它会在每个特征方法的开始被调用。即使您在每个单一特征方法的 given:
块中执行此操作,您仍然需要 to
才能检查 at
。我认为你应该稍微研究一下 Geb 之书。顺便说一句,这就是错误消息试图向您解释的内容:
geb.error.PageInstanceNotInitializedException:
Instance of page class pages.Test_HomePage has not been initialized.
Please pass it to Browser.to(), Browser.via(), Browser.page() or Browser.at() before using it.
在 navigateToHomePage()
中,您的第一个命令因此应该是:
Test_HomePage test_HomePage = to Test_HomePage