使用Groovy特性编写Geb页面

chr*_*ke- 6 groovy multiple-inheritance traits geb

我有一个自适应网站,并希望从每页主要内容中分离出我的页面模板的某些部分是否已折叠的问题:

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 {}
Run Code Online (Sandbox Code Playgroud)

但是,Geb运行时似乎不会从特征中收集static描述块,而是表现为它们不存在.

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

erd*_*rdi 3

如果您查看了有关特征和静态字段的文档,您会注意到它明确提到混合声明静态字段的特征不会将该字段添加到类中。Geb 是在特征添加到 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 = {...}
}
Run Code Online (Sandbox Code Playgroud)