2017-11-21 18 views
0

spock을 사용하여 geb 테스트의 기본 로그를 작성하려고합니다. 나는 2 페이지의 객체를 생성했다. 하나는 로그인 페이지를위한 것이고 다른 하나는 로그인 후에 가져온 페이지를위한 것이다.하나의 Geb 테스트에서 여러 페이지 객체 사용

로그인 페이지

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 
    } 
} 

, 나는 아래의 오류를 얻을

에 의해 발생 : Pages.loginPage 컨텐츠로 타일 1, 또는에 속성으로 해결을 할 수 없습니다 : groovy.lang.MissingPropertyException 그것의 네비게이터 컨텍스트. tile1이 (가) 가져 오는 것을 잊어 버린 클래스입니까?

homePage 대신 loginPage에서 tile1을 찾고 있습니다.

답변

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()} 
    } 
} 
+0

내가 드릴 수 없습니다이 테스트는 당신의 제안에 작동시킬 수 없습니다. 나는 다음 단계에서 즉시 테스트가 실패하는 것을보고있다. 해당 페이지가로드되기를 기다리기 전에 홈 페이지에 있는지 확인하려고 시도합니다. 내가 홈 페이지에 있는지 확인하기 전에 기다려야합니다. 나는 "waitFor {homePage.tile1.isDisplayed()}"위의 : 홈페이지 단계에서 이동했지만 "아니요 같은 속성 : 클래스 tile1 : Pages.homePage"오류로 작동하지 않습니다 – TestRaptor

+0

올바른 제목 ("집")을 얻고 있습니까? ID가있는 다른 요소를 시도하면 작동합니까? – Royg

+0

오른쪽 제목은 집입니다. 그러나이 테스트에서는 실제 페이지가로드되기 전에 제목이 "집"과 같은지 확인하려고했습니다. 제목이 여전히 이전 페이지에서 "로그인"과 같았 기 때문에 실패했습니다.내 HomePage 페이지 개체를 약간 변경했는데 내 문제가 해결 된 것 같습니다. "static at = {title =="Home "} 대신"static at at {waitFor {title == "Home"}} " – TestRaptor

0

수정 LoginPage 페이지 개체

loginButton(to: HomePage) {$("#loginButton")} 

이 홈페이지의 페이지 객체에 범위를 전환하고 포장 타일이 존재가

기본적인 사용법이다, 오류 + 리디렉션하지 :

#loginButton 오류없이 리디렉션을 트리거 경우
loginButton.click() 

, 다음과 같은 전화 loginButton 과부하 이 :

고급 사용량, 에러 + 더 리디렉션 :

loginButton(LoginPage).click()