gpt4 book ai didi

grails - 使用 geb 和 spock 时在页面之间传递状态

转载 作者:行者123 更新时间:2023-12-03 04:22:48 25 4
gpt4 key购买 nike

在下面的示例中(取自 Book of Geb ),我们单击一个按钮,将我们带到另一个页面。

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

此代码有 2 个问题,当尝试填充 searchTerm 时,我在 searchButton.click() 上收到“No such property: searchField for class: GoogleHomePage”。即使我对传递的内容进行硬编码,GoogleResultsPage.searchTerm 仍为 null 并且 at 断言失败。有任何想法吗?

最佳答案

这对于 0.4 来说是不可能的。模板定义的映射选项将成为该模板的选项。更重要的是,内容模板是在静态上下文中定义的,但它们的闭包定义是在实例上下文中评估的。最终结果是无法从该点访问实例状态。

解决方案是使用 0.5 中新的生命周期钩子(Hook):

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 版本中找到。

关于grails - 使用 geb 和 spock 时在页面之间传递状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3631227/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com