当我在 Selenium 上进行 self 训练时,我使用页面对象模型作为我的设计。我的练习网站是https://www.beeradvocate.com (我喜欢啤酒,它给我带来了一些我一直在寻找的测试挑战)。
一旦此类实例是页面覆盖或模式窗口。
我知道在 POM 中,每个页面都有自己的类,其中页面对象位于其中,并且对它们采取相应的方法/操作。此外,如果我单击导航到另一个页面的链接,则会在函数中返回一个新的页面对象,例如:
返回新主页();
当单击“登录”链接时,它会生成一个覆盖模式窗口。框架似乎没有被视为它们自己的页面类。它需要一个 switchToFrame() 操作。这同样适用于这个覆盖层吗?也许只是一个 getWindowHandles() 操作来导航到它?
最佳答案
我建议创建一个单独的类来代表您的模式,特别是当它被其他页面共享或有一天可能会从该页面移出时。
但是,如果模式非常简单并且仅包含在一个页面上并且确实特定于该页面,那么它可以由该 POM 中的一组函数表示。然而,您需要以某种方式将这些方法识别为“区域”或子组,例如为方法命名空间或使用装饰器,我总是认为在 OO 术语中,这听起来像是这里有一个需要划分的子对象出来!
在 Java 中,划分和组合的成本非常低,因此没有太多损失。但是,拥有大量“子组件”的大页面对象可能会变得困惑。这可能取决于网站本身的子结构如何,这将指导您的决定。就像如果模式的选择器相对干净并且与主机页面本身分离一样,它就不会被页面“拥有”。
这个类似的答案指出,“POM”更多的是一个模块表示,而不是整个“页面”(无论现在这意味着什么!)。 https://stackoverflow.com/a/47141290/209288
这个答案也提出了同样的问题。 https://stackoverflow.com/a/49002231/209288
我来寻找类似的答案,并在阅读这些讨论时决定分解我的模态。 (所以我的回答是基于 15 分钟的思考,而不是经验!)
关于java - 在页面对象模型中,覆盖模式窗口应该被视为单独的页面类还是在 "Parent"页面类内?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62077683/