3

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

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

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

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

to ReviewQueuePage
assert at(ReviewQueuePage)

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

go ReviewQueuePage.url

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

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

4

2 回答 2

5

您可能对此资源感兴趣。http://adhockery.blogspot.com/2010/11/encapsulating-page-state-and-actions-in.html它在git中也有示例。

使用 geb 和 spock 时,这也可能有用在页面之间传递状态

于 2011-05-13T15:45:05.987 回答
1

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

于 2011-05-13T13:25:49.917 回答