【问题标题】:How to manage commons pages in page object pattern如何在页面对象模式中管理公共页面
【发布时间】:2020-02-27 19:56:32
【问题描述】:

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

利用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


    【解决方案1】:

    为什么要继承?

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

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

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      • 你的意思是作曲吗?能否请您提供更多详细信息?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-04-12
      • 2020-10-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-20
      相关资源
      最近更新 更多