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

时间:2015-11-24 12:40:33

标签: java spock geb

给出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只是一个GebSpec,带有常见的setupSpec(),用于读取所有规格的公共属性)

如果我跑这个,我得到:

Condition not satisfied:

openSeriesBuscador()
|
null

Condition not satisfied:

openSeriesBuscador()
|
null

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

我认为我不能正确理解内容变量的功能或访问方式,但我无法找到它看着Geb Book。任何人都可以帮我理解这种行为吗?

为什么在方法页面中访问静态内容变量会失败但不能从Spec类访问? 提前谢谢!

2 个答案:

答案 0 :(得分:1)

问题在于方法

void openSeriesBuscador(){
    seriesBuscadorButton.click()
}

应该是

def openSeriesBuscador(){
    seriesBuscadorButton.click()
}

注意 def 而不是 void

首先,您需要知道 def 代表的内容:https://stackoverflow.com/a/9247169/426096

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

答案 1 :(得分:1)

您应该在openSeriesBuscador()区块而不是when:区块中呼叫then: