前面Page Object pattern有提到,由三個區塊所組成:at、url、content DSL,content DSL是比較複雜的部分,在此額外補充說明。
Content DSL
* 範例一
import geb.*
class LoginPage extends Page {
static content = {
// «名稱» { «定義» }
emailInput { $("input[name=account]") }
}
}
Browser.drive {
to LoginPage
emailInput.value('aaa@bbb.com')
}
* 範例二
import geb.*
class FrontPage extends Page {
static content = {
menu { menuLinkName -> $('div', id: menuLinkName) }
}
}
Browser.drive {
to FrontPage
assert menu("menu-about").text() == "About Me"
assert menu("menu-faq").text() == "FAQ"
}
Template Options
除了使用預設參數,也可選擇自定參數。
可自定的參數有
* required
* cache
* to
* wait
* page
範例
import geb.*
class FrontPage extends Page {
static content = {
// «名稱»(«參數») { «定義» }
loginLink(required: false) { $('.login') }
logoutLink(required: false) { $('.logout') }
}
}
required預設true
當required為true,但loginLink不存在時,下面的範例會拋出 RequiredPageContentNotPresent ,但若required為false,則不會拋出exception。