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

时间:2011-05-13 09:52:53

标签: groovy cucumber bdd geb

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

然后我重构了我的GEB代码,以便从一个单独的类中使用,因此我可以使用方法调用封装常用命令。

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

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

to ReviewQueuePage
assert at(ReviewQueuePage)

上面的代码将抛出一个空指针,因为无法再以静态方式访问该对象,这意味着我必须将代码更改为

go ReviewQueuePage.url

这将删除将该类用作页面的所有功能。

是否有任何解决方案可以封装每个页面的数据,因为它不会导致页面采取不同的行为。

2 个答案:

答案 0 :(得分:5)

答案 1 :(得分:1)

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