使用Groovy特性编写Geb页面

时间:2014-09-16 23:58:46

标签: 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 == 'My Site' }
}

class DesktopHomePage extends Page implements DesktopPage, HomePage {}

然而,Geb运行时似乎没有从特征中收集static描述块,而是表现得好像它们不存在。

是否有可能使用Geb特征隐式地构成这样的问题?如果没有,是否有一种语法可以让我从已实现的特征中获取信息? HomePage.at无法解决。

1 个答案:

答案 0 :(得分:3)

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

如果两个页面的网址和检查程序相同,并且只有移动版和桌面版的内容不同,为什么不简单地使用继承?

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

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

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