完整範例

以下是 Page 物件定義的範例,在 content 區塊中,我們將替網頁中需要被操作的 DOM 元件,透過 Navigator API 定義它們,利於再寫測試碼時使用。

Geb Sample Code

Browser.drive {

    config.baseUrl = 'http://getbootstrap.com/'

    to SigninPage
    login('aaa@bbb.com', '11111111')

    assert emailInput.value() == ''
}.quit()

class SigninPage extends Page {
    static at = {$('h2').text() == 'Please sign in'}
    static url = 'examples/signin/'
    static content = {
        emailInput {$('#inputEmail')}
        passwordInput {$('#inputPassword')}
        loginButton {$('button')}
    }

    def login(email, password){
        emailInput.value email
        passwordInput.value password
        loginButton.click()
    }
}

Geb Sample Code

import geb.Page

class DashboardPage extends Page {
    static at = { heading.text() == "My Dashboard" }
    static content = {
        heading { $("h1") }
    }
}

在操作 Page 物件時,可以搭配 toat 兩個指令使用。

  • 使用 to 開啟 Page 物件所在的 URL 位址。
  • 使用 at 判斷是否為在該 Page 所屬頁面。

Page 物件讓 Geb 測試碼呈現更有趣的 DSL 風格。

Geb Sample Code

import geb.Browser

Browser.drive {
    to LoginPage
    assert at(LoginPage)
    loginForm.with {
        username = "admin"
        password = "password"
    }
    loginButton.click()
    assert at(DashboardPage)
}

定義好的 Page 物件可以被重複使用,依照測試案例(test case)的需求,組合成不同的測試執行流程。對於中大型的 Web Application 測試,能降低測試碼維護的複雜度。

results matching ""

    No results matching ""