java - Selenium、Java、PageObject 模式、破坏的层次结构

标签 java inheritance selenium-webdriver aggregation pageobjects

我正在使用页面对象模式对我的 Web 应用程序交互进行建模。 应用程序中的大多数页面都有一些标准选项,例如“登录”、“注销”、“主页”等。 此外,它们都有 protected WebDriver 引用。

因此,我创建了一个所有页面都会继承的 super 类 - GrandpaClass。这将仅包含 protected WebDriver 引用和用于初始化驱动程序的构造函数。

然后,我创建了一个大多数页面都会继承的父类(super class) - PapaClass。它继承了GrandpaClass并添加了我上面列出的标准菜单功能(登录等)

当相同的菜单操作可能导致显示不同的页面时,就会出现问题。例如,当您注销时,您可以转到登录页面,也可以返回到错误页面。但由于登录功能位于 PapaClass 中,该类必须返回不同的页面,继承自他。这使得父类(super class)依赖于它的子类。

我正在考虑使用诸如策略之类的东西来分解常见的菜单功能。因此,PapaClass 不会维护功能,而只会维护对 Menu 对象的引用。

这是一个好主意,还是有更优雅(或更简单)的方法来解决这个问题?

谢谢。

最佳答案

我认为您的 Menu 对象是个好主意,但您不需要 PapaClass。您可以让所有页面继承 GrandpaClass 并使用 Composition哪里有共同元素。通过继承,您说的是“是一个带有菜单的页面”,这表明该页面应该只有一个菜单。

关于java - Selenium、Java、PageObject 模式、破坏的层次结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11213775/

相关文章:

java - 不同类型的列表作为参数

java - 如何将 Canvas 复制到位图中

inheritance - 匿名类继承

python - 基于href自动访问多个页面抓取数据

java - 如何使用Chrome浏览器处理 "StaleElementReferenceException"

java - 在if语句中比较AssertNull

c++ - 可变参数模板的继承

c++ - 为什么只有在使用公共(public)继承时派生类的友元函数为 "available"?

javascript - 在 Webdriver JS 测试期间无法切换窗口

java - 客户端与服务器的对话以及 JPA 事务