了解如何访问 geb.Page 处的内容对象

Understanding how to access content objects at geb.Page

给出一个 geb.Page 赞:

class ConsultaPage extends Page {

static url = "web/search-basic"

static content = {
    titol { $('h4',0).text() }
    searchBox { $(name: "criteria").module(TextInput) }
    searchButton { $(By.id("submit_button")) }
    seriesBuscadorButton { $('img', src:"/web/resources/img/find") }
}

static at = {
    $("#serveis h2").text() == "Menú consulta"
}

void openSeriesBuscador(){
    seriesBuscadorButton.click()
}
}

还有像这样的规范:

class id_3031_PageSpec extends BaseGebSpec {

def "login ok com usuari normal accedeix a consulta i obre minibuscador series"(){
    given:
        via iArxiuPage
    when:
        // unrelated stuff...       
    then:
        to ConsultaPage
    and:
        //this works -> $('img', src:"/refweb/resources/img/find")*.click()            
        //this also works-> seriesBuscadorButton.click()            
        openSeriesBuscador()
    then:
        titol.equals("Cerca i selecció de sèrie")       
}
}

(BaseGebSpec 只是一个具有通用 setupSpec() 的 GebSpec,用于读取所有规范的通用属性)

如果我 运行 我得到:

Condition not satisfied:

openSeriesBuscador()
|
null

Condition not satisfied:

openSeriesBuscador()
|
null

如果不使用: openSeriesBuscador() 方法(使用具有相同 $() 逻辑的内容变量) 我使用 $('img', src:"/refweb/resources/img/find").click()seriesBuscadorButton.click() 效果很好。

我想我没有正确理解内容变量的功能或访问方式,但我无法在 Geb Book 中找到它。谁能帮助我理解这种行为?

为什么在方法的页面中访问静态内容变量会失败,但不能从规范 class 中访问? 提前致谢!

问题出在方法

void openSeriesBuscador(){
    seriesBuscadorButton.click()
}

应该是

def openSeriesBuscador(){
    seriesBuscadorButton.click()
}

注意 def 而不是 void

首先你需要知道 def 代表什么,解释如下:

和 "magic" 在 then spock 块中: http://mrhaki.blogspot.de/2010/07/spock-spotlight-assert-magic.html

您应该在 when: 块而不是 then: 块中调用您的 openSeriesBuscador()