自定义' at'有关闭的额外参数?

时间:2014-02-12 22:00:39

标签: geb

是否可以在页面上的'at'闭包中指定一些可选参数,如下所示:

class ManagerDashboardClientsPage extends Page {
    static at = { year, geo ->
        if (year) {
            GebUtil.selectedYear == year
        }
        title.endsWith('Dashboard: Clients')
    }
}

这样我就可以写两个

at ManagerDashboardClientsPage

at ManagerDashboardClientsPage(2013, 'North East')

目前第一个打破了

No signature of method: page.ManagerDashboardClientsPage$__clinit__closure1.doCall() is applicable for argument types: () values: []
Possible solutions: doCall(java.lang.Object, java.lang.Object), call(), call([Ljava.lang.Object;), call(java.lang.Object), call(java.lang.Object, java.lang.Object), equals(java.lang.Object)
groovy.lang.MissingMethodException: No signature of method: page.ManagerDashboardClientsPage$__clinit__closure1.doCall() is applicable for argument types: () values: []
Possible solutions: doCall(java.lang.Object, java.lang.Object), call(), call([Ljava.lang.Object;), call(java.lang.Object), call(java.lang.Object, java.lang.Object), equals(java.lang.Object)
    at geb.Page.verifyThisPageAtOnly(Page.groovy:165)
    at geb.Page.verifyAt(Page.groovy:133)
    at geb.Browser.doAt(Browser.groovy:358)
    at geb.Browser.at(Browser.groovy:289)
    at geb.spock.GebSpec.methodMissing(GebSpec.groovy:51)
    at spec.ManagerDashboardClientsSpec.login as CEO(ManagerDashboardClientsSpec.groovy:16)

1 个答案:

答案 0 :(得分:4)

在Groovy中,您可以为可选的闭包参数设置默认值,如下所示:

static at = { year=null, geo=null ->
    ...
}

我认为你会明白的。 :)

更新

好的,我知道你不再需要它了,但是当我学习Groovy时我把这个用于自己的用途,我觉得有人会觉得它很有用:

  • { -> ... } 一个完全没有参数的闭包。如果用params调用它,Groovy会爆炸。
  • { ... } 一个带有一个可选参数的闭包,名为“it”
  • { foo -> ... } 一个名为“foo”的参数的闭包(foo可以是任何类型)
  • { foo, bar, baz -> ... } 一个名为“foo”,“bar”和“baz”
  • 的3个参数的闭包
  • { String foo -> ... } 如果您愿意,可以指定参数的类型