使用页面对象模式,我正在为每个页面创建一个类。然后我意识到有些页面具有类似的CSS类,我重复了太多代码。例:BasePage =所有页面都继承自他(设置了驱动程序和等待时间)Page1,Page2,Page3 =它们都具有相似的属性,因此我将它们归为一个类commonPage
使用commonPage中pageObjetcs的良好做法,我将其分为其他3个页面(因此它们可以保持较小):CommonPage_Header,CommonPage_Menu和CommonPage_List。
问题是,例如,page1无法从CommonPage_Header,CommonPage_Menu和CommonPage_Header继承。我该如何处理这种情况?我已经尝试使用抽象类和接口。
我需要的是每个页面都继承自commonPage_Header,commonPage_Menu和commonPage_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 :(
}```
您不必在页面中继承。请创建一个页面,其中其他页面对象是变量,例如
Page 1 Object has
CommonHeader ch1 =new CommonHeader
CommonFooter ch2-=new CommonFooter
为什么继承?
使用is-a
,has-a
关系,避免继承,使用合成。将标题,菜单视为组件,然后使用继承将其注入页面对象中。
例如,我不会在用户界面建议的每个页面对象中放置标题,菜单。
为什么没有一个具有这些通用组件的通用页面对象,而不是在所有页面对象中都具有它们?使用对您来说容易理解的结构,首先考虑高级>定义>重构。