我正在使用 geb spock 和 groovy 創建一個自動化腳本。在我的測驗類中,我有多個測驗,我想在運行任何測驗含義之前導航到主頁
- 登錄到應用程式并導航到主頁(登錄后的默認頁面是主頁)。
- 單擊鏈接 1。檢查Page.navigate to home page
- 單擊鏈接 2。檢查頁面。導航到主頁
- 單擊鏈接 3。檢查頁面。導航到主頁...
我創建了一個方法并嘗試在我的 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 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 的新手,我可能會犯一個非常愚蠢的錯誤,但任何幫助或建議以有效的方式實作這一點都將不勝感激。
uj5u.com熱心網友回復:
您應該使您的功能方法彼此獨立,以便可以按任何順序呼叫它們。你為什么不在你的方法中to Test_HomePage加入類似的東西setup()?然后它將在每個特征方法的開頭被呼叫。即使您在given:塊中為每個單一功能方法執行此操作,您仍然需要to在檢查at. 我認為你應該稍微研究一下蓋布之書。順便說一句,這就是錯誤訊息試圖向您解釋的內容:
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
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/449462.html
