Groovy 使用GEB和Cucumber在页面中封装逻辑

Groovy 使用GEB和Cucumber在页面中封装逻辑,groovy,cucumber,bdd,geb,Groovy,Cucumber,Bdd,Geb,使用GEB,我使用页面对象模式静态地封装关于不同页面的信息 然后我重构了我的GEB代码,以便从一个单独的类中使用,这样我就可以使用方法调用封装公共命令 例如,我有一个login()方法,它将调用适当的GEB代码登录到我正在测试的网站。然后,我将使用TestHelper类上的方法调用实现其他常用函数 我想将这些常用函数移到它们所作用的页面上。例如,搜索页面将具有搜索方法,登录页面将具有登录方法。通过这种方式,我可以构建一个页面库,其中包含所有通用功能,以便在多个GEB项目中使用。现在要做到这一点,

使用GEB,我使用页面对象模式静态地封装关于不同页面的信息

然后我重构了我的GEB代码,以便从一个单独的类中使用,这样我就可以使用方法调用封装公共命令

例如,我有一个login()方法,它将调用适当的GEB代码登录到我正在测试的网站。然后,我将使用TestHelper类上的方法调用实现其他常用函数

我想将这些常用函数移到它们所作用的页面上。例如,搜索页面将具有搜索方法,登录页面将具有登录方法。通过这种方式,我可以构建一个页面库,其中包含所有通用功能,以便在多个GEB项目中使用。现在要做到这一点,每个页面必须在geb.Browser上有一个句柄,因此我现在必须在测试设置中实例化每个页面。这样我就不能再使用标准的页面对象模式了

to ReviewQueuePage
assert at(ReviewQueuePage)
上面的代码将抛出一个空指针,因为对象不再能够以静态方式访问,这意味着我必须将代码更改为

go ReviewQueuePage.url
这将删除将类用作页面的所有功能


是否有人有任何解决方案来封装每个页面的数据,使其不会导致页面行为不同。

我有点困惑。您是否正在寻找一种在多个页面之间共享通用代码的方法?这是我在多次阅读你的问题后得到的印象,但我不太确定。你提到了“公共功能”。那么,可以使用模块对象封装公共组件。在每个使用公共组件的页面中,只需引用页面对象中的模块对象

您可能对该资源感兴趣。它也有一些例子


这可能也很有用

对不起,我想在它们所作用的页面上封装通用函数,然后在不同的项目之间共享这些页面。我将看一看模块对象。在继续任何开发工作之前,先看一看整个Geb手册(从头到脚)。如果您使用的是Geb,则必须阅读。不允许略读。