Вопрос

Is it possible to specify some optional parameter(s) to the 'at' closure on the page like this:

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

so that I can write both

at ManagerDashboardClientsPage

and

at ManagerDashboardClientsPage(2013, 'North East')

Currently the first one breaks with

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)
Это было полезно?

Решение

In Groovy you can set default values for optional closure parameters, like so:

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

I think that'll clear ya up. :)

update

Ok, I know you don't need it anymore, but I made this for my own use when I was learning Groovy, and I thought someone might find it helpful:

  • { -> ... } a closure with exactly zero parameters. Groovy will blow up if you call it with params.
  • { ... } a closure with one optional parameter, named "it"
  • { foo -> ... } a closure with one parameter named "foo" (foo can be any type)
  • { foo, bar, baz -> ... } a closure with 3 parameters named "foo", "bar" and "baz"
  • { String foo -> ... } You can specify the type of the parameters if you like
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top