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

发布于 2024-11-07 04:23:16 字数 612 浏览 6 评论 0原文

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

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

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

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

to ReviewQueuePage
assert at(ReviewQueuePage)

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

go ReviewQueuePage.url

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

是否有人有任何解决方案来封装每个页面的数据,并且不会导致页面表现不同。

Using GEB I was using the Page Object Pattern to encapsulate information about the different pages statically.

I then refactored my GEB code to be used from a separate class so I could encapsulate common commands using method calls.

For example I would have a method login() which will call the appropriate GEB code to login to the website that I am testing. I would then have other common functions using method calls on a TestHelper class.

I wanted to move these common functions to the Pages that they act upon. For example a search page would have a search method, the login page would have the login method. This way I can build a library of pages which have all the common functionality on them for use across multiple GEB projects. Now to do this each page must have a handle on the geb.Browser therefore I would now have to instantiate each page in the test setup. By doing so I am no longer able to use the standard page object pattern.

to ReviewQueuePage
assert at(ReviewQueuePage)

The code above will throw a null pointer as the object is no longer able to be accessed in a static manner meaning I had to change the code to

go ReviewQueuePage.url

This removes all the functionality of using the class as a Page.

Does anyone have any solutions for encapsulating the data for each of the pages in way that it doesn't cause the pages to act differently.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

━╋う一瞬間旳綻放 2024-11-14 04:23:16

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

I'm a bit confused. Are you looking for a way to share common code among multiple pages? This is the impression I get after reading your question several times, but I'm not quite sure. You mentioned "common functions". Well, common components can be encapsulated using Module objects. In each page that uses a common component, simply reference the module object in the page object.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文