使用页面对象模式,我为每个页面创建一个类。然后我意识到有些页面有类似的CSS类,我重复了太多代码。 例子: BasePage = 所有页面继承自他(驱动程序和等待设置的地方) Page1、Page2、Page3 = 它们都具有相似的属性,因此我将它们分组到一个名为 普通页面
利用 commonPage 中 pageObjetcs 的良好实践,我分为其他 3 个页面(这样它们可以保持更小):CommonPage_Header、CommonPage_Menu 和 CommonPage_List.
问题是,例如,page1 不能继承CommonPage_Header、CommonPage_Menu 和CommonPage_Header。我该如何应对这种情况?我已经尝试过使用抽象类和接口(interface)。
我需要的是每个页面都继承自 commonPage_Header、commonPage_Menu 和 commonPage_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-a
、has-a
关系,避免继承,使用组合。
将标题、菜单视为组件,并使用继承将它们注入(inject)到页面对象中。
例如,我不会在 ui 建议的每个页面对象中放置标题、菜单。
为什么不使用一个包含这些通用组件的通用页面对象,而不是将它们放在所有页面对象中?
使用易于理解的结构,首先思考高层次>定义>重构。
关于java - 如何以页面对象模式管理公共(public)页面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60440864/