java - 如何以页面对象模式管理公共(public)页面

标签 java selenium testng pageobjects

使用页面对象模式,我为每个页面创建一个类。然后我意识到有些页面有类似的CSS类,我重复了太多代码。 例子: BasePage = 所有页面继承自他(驱动程序和等待设置的地方) Page1、Page2、Page3 = 它们都具有相似的属性,因此我将它们分组到一个名为 普通页面

利用 commonPage 中 pageObjetcs 的良好实践,我分为其他 3 个页面(这样它们可以保持更小):CommonPage_HeaderCommonPage_MenuCommonPage_List.

问题是,例如,page1 不能继承CommonPage_Header、CommonPage_Menu 和CommonPage_Header。我该如何应对这种情况?我已经尝试过使用抽象类和接口(interface)。

我需要的是每个页面都继承自 commonPage_HeadercommonPage_MenucommonPage_List 及其任何特定属性

注意:其中一些“特定属性”是带有主体的方法,这就是我不打算使用接口(interface)的原因

public class BasePage(){
 //browsers and timeouts
}

public abstract class CommonPage_Header extends BasePage {
     public PanelHeader(WebDriver driver) {
            super(driver);
        }
//similar methods
}

public class Page1 extends CommonPage_Header {
//overwriting some methods of CommonPage_Header, but setting some specification for the page 1
//The problem: I need to use methods of CommonPage_Menu and CommonPage_List too :(
}```

最佳答案

为什么要继承?

使用is-ahas-a关系,避免继承,使用组合。 将标题、菜单视为组件,并使用继承将它们注入(inject)到页面对象中。

例如,我不会在 ui 建议的每个页面对象中放置标题、菜单。

为什么不使用一个包含这些通用组件的通用页面对象,而不是将它们放在所有页面对象中?
使用易于理解的结构,首先思考高层次>定义>重构。

关于java - 如何以页面对象模式管理公共(public)页面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60440864/

相关文章:

java - 使用@Formula 增强 Spring 宠物诊所

Python selenium 获取所选元素的标签值

java - selenium 服务器,selenium 客户端,在 UBUNTU GUI 服务器上

java - 当尝试在 Selenium 中使用 POM 自动化论坛时,我遇到了 java.lang.NoClassDefFoundError...我该如何解决这个问题?

java - 使用 TestNG 的页面对象模式

java - 用户定义的 CORBA 异常在编译后给我错误

java - 如何为 Java 程序设置进程名称?

java - java 中的大整数乘法(递归)在输入 2000 位数字量级时停止,不会出现错误。为什么?

python - 动态生成的元素 -NoSuchElementException : Message: no such element: Unable to locate element?

java - 断言记录被删除