给出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类访问? 提前谢谢!
答案 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:
。