首页 > 解决方案 > 如何在页面对象模式中管理公共页面

问题描述

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

使用 commonPage 中 pageObjetcs 的良好做法,我将其划分为其他 3 个页面(这样它们可以保持更小):CommonPage_HeaderCommonPage_MenuCommonPage_List

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

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

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

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 :(
}```

标签: javaseleniumtestngpageobjects

解决方案


为什么要继承?

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

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

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


推荐阅读