在下面的示例中(取自盖布之书 http://geb.codehaus.org/manual/latest/index.html),我们点击一个按钮,将我们带到另一个页面。
class GoogleHomePage extends Page {
static url = "http://google.com"
static at = {
title == "Google"
}
static content = {
searchField { $("input[name=q]") }
searchButton(to: GoogleResultsPage) { $("input[value='Google Search']") }
}
}
Browser.drive(GoogleHomePage) {
searchField.value("Chuck Norris")
searchButton.click()
assert at(GoogleResultsPage)
assert resultLink(0).text() ==~ /Chuck/
}
当我们转到另一个页面时如何传递状态?例如,用户选择了这种语言,在下一页中,我希望该页面采用该语言。一个更通用的例子:
import geb.*
import grails.plugin.geb.GebSpec
class GoogleHomePage extends Page {
static url = "http://google.com"
static at = { title == "Google" }
static content = {
searchField { $("input[name=q]") }
searchButton(to: GoogleResultsPage, searchTerm:searchField.value()) { $("input[value='Google Search']") }
}
}
class GoogleResultsPage extends Page {
def searchTerm
static at = {
title == "${searchTerm} - Google Search"
}
}
class MainFunctionalSpec extends GebSpec {
def "Google search"() {
when:
to GoogleHomePage
then:
searchField.value("Chuck Norris")
searchButton.click()
assert at(GoogleResultsPage)
}
}
这段代码有两个问题,当尝试填充 searchTerm 时,我在 searchButton.click() 上收到“没有这样的属性:类的 searchField:GoogleHomePage”。即使我对传递的内容进行硬编码,GoogleResultsPage.searchTerm 仍为 null 并且 at 断言失败。有任何想法吗?
这对于 0.4 来说是不可能的。模板定义的映射选项将成为该模板的选项。更重要的是,内容模板是在静态上下文中定义的,但它们的闭包定义是在实例上下文中评估的。最终结果是无法从该点访问实例状态。
解决方案是使用0.5中新的生命周期钩子:
http://bamboo.ci.codehaus.org/browse/GEB-MASTERDEFAULTS/latest/artifact/Manual/pages.html#lifecycle_hooks http://bamboo.ci.codehaus.org/browse/GEB-MASTERDEFAULTS/latest/artifact/Manual/pages.html#lifecycle_hooks
class GoogleHomePage extends Page {
static url = "http://google.com"
static at = { title == "Google" }
static content = {
searchField { $("input[name=q]") }
searchButton(to: GoogleResultsPage, searchTerm:searchField.value()) { $("input[value='Google Search']") }
}
def onUnload(GoogleResultsPage nextPage) {
nextPage.searchTerm = searchField.value()
}
}
class GoogleResultsPage extends Page {
def searchTerm
static at = {
title == "${searchTerm} - Google Search"
}
}
这在 codehaus 快照存储库的最新可下载 0.5-SNAPSHOT 版本中可用。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)