如何以页面对象模式管理公共页面

问题描述 投票:0回答:2

使用页面对象模式,我正在为每个页面创建一个类。然后我意识到有些页面具有类似的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 :(
}```
java selenium testng pageobjects
2个回答
0
投票

您不必在页面中继承。请创建一个页面,其中其他页面对象是变量,例如

Page 1 Object has
CommonHeader ch1 =new CommonHeader
CommonFooter ch2-=new CommonFooter

0
投票

为什么继承?

使用is-ahas-a关系,避免继承,使用合成。将标题,菜单视为组件,然后使用继承将其注入页面对象中。

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

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

© www.soinside.com 2019 - 2024. All rights reserved.