Geb 使用一个静态字段content
来定义页面或模块的内容。该content
字段的值是一个闭包。
class GebishOrgHomePage extends Page {
static content = {
manualsMenu {
module MenuModule, $("#header-content ul li", 0)
}
links { $('.link-list li a') }
}
}
Intellij 已经支持此内容 dsl,但是它不支持module
andmoduleList
方法。这会在使用模块时导致有限的自动完成支持。
为了解决这个问题,我想编写一个 GroovyDSL 脚本,将缺少的方法定义添加到内容闭包及其嵌套闭包中。但是,我不知道如何将方法添加到未传递给方法的闭包中,因为enclosingCall
需要具体的方法名称。
另一件事是这些方法必须具有这样的通用返回类型:
<T extends Module> T module(Class<T> m) {
// return an instance of T
}