2017-11-21 23 views
0

私はspockを使ってgebテストで基本的なログを書き込もうとしています。 2ページのオブジェクトを作成しました.1つはログインページ用、もう1つはログイン後に取得するページ用です。1つの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 
    } 
} 

私がテストを実行すると、私は以下のエラーが原因

取得:groovy.lang.MissingPropertyException:Pages.loginPage用コンテンツとして、または上のプロパティとして tile1を解決することができませんがその ナビゲータコンテキスト。 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

私はこのテストはあなたの提案で動作するように取得することができませんよ。私はテストがすぐに失敗するのを見ている:ステップ。そのページが読み込まれるのを待つ前に、ホームページにあることを確認しようとします。私はホームページにいることを確認する前に待つ必要があります。私は、 "homepage.tile1.isDisplayed()}"をホームページのステップの上に移動しようとしましたが、 "No such property:tile1 for classes:Pages.homePage"のエラーで動作しません。 – TestRaptor

+0

適切なタイトル(「ホーム」)を取得していますか?異なる要素、できればIDを持つ要素を試してみたら、それはうまくいくのでしょうか? – Royg

+0

右のタイトルはHomeです。しかし、テストでは、実際のページが読み込まれる前にタイトルが「ホーム」と等しいことを確認しようとしていました。タイトルはまだ前のページから「ログイン」に等しいので、失敗していました。私は私のホームページのページオブジェクトにわずかな変更を加え、私の問題を解決したようです。 "static at = {title ==" Home "}の代わりに、" static at = {waitFor {title == "Home"}} " – TestRaptor

0

変更LoginPageページオブジェクト

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

このホームページのページオブジェクトにスコープが切り替わり、tile1が存在

基本的な使用で、エラー+はリダイレクトしない:

#loginButtonがエラーなしリダイレクトをトリガした場合に
loginButton.click() 

、次にような呼び出しloginButton過負荷しましたこの:

高度な使用方法、エラー+なしのリダイレクト:

loginButton(LoginPage).click() 
関連する問題