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
和moduleList
方法。使用模块时,这会导致有限的自动完成支持。
为了解决这个问题,我想编写一个GroovyDSL脚本,将缺少的方法定义添加到内容闭包及其嵌套闭包中。但是,我不知道如何将方法添加到未传递给方法的闭包中,因为enclosingCall
需要具体的方法名称。
另一件事是这些方法必须具有这样的通用返回类型:
<T extends Module> T module(Class<T> m) {
// return an instance of T
}
答案 0 :(得分:1)
如果使用latest snapshot,则IDE会理解module()
次调用。这完全取决于你所追求的moving module()
to Navigator
- 自动完成和强类型。
查看Book of Geb的当前版本section 6.4。 moduleList()
将在未来版本中消失,该部分将说明要使用的内容。使用map参数初始化模块属性的module()
方法也将继续,您现在自己初始化模块并将实例传递给module()
,并且在6.4中有一个示例。多亏了这一切,您将获得有关IntelliJ中模块定义和使用的自动完成。