0

Geb 使用一个静态字段content来定义页面或模块的内容。该content字段的值是一个闭包。

 
class GebishOrgHomePage extends Page {
    static content = {
        manualsMenu {
            module MenuModule, $("#header-content ul li", 0)
        }
        links { $('.link-list li a') }
    }
}

Intellij 已经支持此内容 dsl,但是它不支持moduleandmoduleList方法。这会在使用模块时导致有限的自动完成支持。

为了解决这个问题,我想编写一个 GroovyDSL 脚本,将缺少的方法定义添加到内容闭包及其嵌套闭包中。但是,我不知道如何将方法添加到未传递给方法的闭包中,因为enclosingCall需要具体的方法名称。

另一件事是这些方法必须具有这样的通用返回类型:


<T extends Module> T module(Class<T> m) {
    // return an instance of T
}
4

1 回答 1

1

如果您使用最新的快照,那么module()您的 IDE 将理解调用。这归结为完全符合module()Navigator您的要求 - 自动完成和强类型。

查看Geb 之书第 6.4 节的当前版本。将moduleList()在未来的版本中消失,该部分解释了要使用的内容。采用module()map 参数来初始化模块属性的方法也将继续,您现在自己初始化模块并将实例传递给,module()并且在 6.4 中有一个这样做的示例。感谢所有这些,您将在 IntelliJ 中获得围绕模块定义和使用的自动完成功能。

于 2015-06-10T08:21:18.760 回答