首页 > 解决方案 > 在页面对象模型中,应将覆盖模式窗口视为单独的页面类还是在“父”页面类中?

问题描述

当我在 Selenium 上训练自己时,我使用页面对象模型作为我的设计。我的练习网站是https://www.beeradvocate.com(我喜欢啤酒,它提出了我一直在寻找的一些测试挑战)。

一旦这样的实例是页面覆盖或模式窗口。

我知道在 POM 中每个页面都有它自己的类,页面对象所在的位置以及对它们采取的相应方法/操作。此外,如果我单击导航到另一个页面的链接,则会在函数中返回一个新的页面对象,例如:

返回新主页();

单击登录链接时,它会生成一个覆盖模式窗口。似乎框架没有被视为它们自己的页面类。它需要一个 switchToFrame() 动作。这同样适用于这个覆盖吗?也许只是一个 getWindowHandles() 操作来导航到它?

标签: javaseleniumoverlay

解决方案


我建议创建一个单独的类来表示您的模式,特别是如果它由其他页面共享或可能有一天被移出该页面。

但是,如果模态非常简单并且只包含在一个页面上并且确实特定于该页面,那么它可以由该 POM 中的一组函数表示。但是,您需要以某种方式将这些方法识别为“区域”或子组,例如命名方法或使用装饰器,我总是认为在 OO 术语中闻起来就像这里有一个需要划分的子对象出去!

在 Java 中划分和组合非常便宜,所以没有太多的惩罚。但是拥有一个包含大量“子组件”的大页面对象可能会变得混乱。这可能取决于网站本身的子结构有多好,这将指导您的决定。就像模式的选择器相对干净并且与主机页面本身分开一样,它就更少被页面“拥有”。

这个类似的答案指出,“POM”更像是一个模块表示,而不是整个“页面”(无论这些天意味着什么!)。 https://stackoverflow.com/a/47141290/209288

这个答案也问了同样的问题。 https://stackoverflow.com/a/49002231/209288

我来寻找类似的答案,并在阅读这些讨论时下定决心分解我的模态。(所以我的回答是基于 15 分钟的思考,而不是经验!)


推荐阅读