使用Groovy特性组合Geb页面

使用Groovy特性组合Geb页面,groovy,multiple-inheritance,geb,traits,Groovy,Multiple Inheritance,Geb,Traits,我有一个响应性网站,希望将我的页面模板部分是否从每页的主要内容中折叠的问题分离出来: trait DesktopPage { static content = { header { $('nav', id:'nav-container') } } } trait MobilePage { // other stuff } trait HomePage { static url = '' static at = { title == 'M

我有一个响应性网站,希望将我的页面模板部分是否从每页的主要内容中折叠的问题分离出来:

trait DesktopPage {
    static content = {
        header { $('nav', id:'nav-container') }
    }
}

trait MobilePage {
    // other stuff
}

trait HomePage {
    static url = ''
    static at = { title == 'My Site' }
}

class DesktopHomePage extends Page implements DesktopPage, HomePage {}
然而,Geb运行时似乎并没有收集特征的
静态
描述块,而是像它们不存在一样

有没有可能通过Geb隐式地使用traits组合这样的关注点?如果没有,是否有语法可以让我从实现的traits中提取信息<代码>主页。at
无法解析。

如果您查看了,您会注意到它明确提到,混合声明静态字段的特征不会将字段添加到类中。Geb是在traits被添加到Groovy之前创建的,因此在设计API时绝对没有考虑使用它们来编写页面

如果两个页面的url和at checker相同,并且移动版和桌面版的内容不同,为什么不简单地使用继承呢

class HomePage {
    static url = ''
    static at = { title == 'My Site' }
}

class DesktopHomePage extends HomePage {
    static content = {...}
}

class MobileHomePage extends HomePage {
    static content = {...}
}

如果删除traits中的
static
,会发生什么?@WillP不适用于Geb习语。它有一个特殊的DSL,用于那些受Grails启发的比特。出于好奇:如果你将这些特性声明为接口,行为会发生任何变化吗?