如何将广义对象用于2个不同的类?

时间:2018-09-04 06:19:48

标签: java object components javabeans

我有2个组件类

  1. OrderDetailsS​​ite1.java

  2. OrderDetailsS​​ite2.java

我有一个bean类,用于存储购物车详细信息

  • 产品名称
  • 数量
  • 单价
  • 小计

现在,我必须创建一个通用方法,在该方法中,我必须传递Component类Object并将其值与bean类数据进行比较。

代码试用版:

public void validateProductDetails(Object obj) {

    OrderDetailBean bean = (OrderDetailBean) ConfigurationManager.getBundle().getObject("order_details");
    OrderDetailsSite1 comp=null;

    if (obj instanceof OrderDetailsSite1) {

        comp = (OrderDetailsSite1) obj;
    }

    for (int i = 0; i < bean.getProductName().size(); i++) {

        assertResult( comp.getProductList().get(i).getProductName().getText(), bean.getProductName().get(i));
        assertResult( comp.getProductList().get(i).getProductQuantity().getText(), bean.getProductQuantity().get(i));
        assertResult( comp.getProductList().get(i).getProductUnitPrice().getText(), bean.getProductUnitprice().get(i));
        assertResult(comp.getProductList().get(i).getProductSubtotal().getText(), bean.getProductSubtotal().get(i));
    }

}

我为组件1所做的代码,但对于组件2我需要重复相同的代码吗?还是有任何规定可以有效地做到这一点

已编辑

我正在使用selenium,并且在两个类中都创建了相同的变量和方法名,但是两者的定位符不同。使用超类概念可以做同样的事情吗?

OrderDetailsSite1.java

@FindBy(locator = "magento.ordered.item.name")
private QAFWebElement productName;

@FindBy(locator = "magento.ordered.item.quantity")
private QAFWebElement productQuantity;

@FindBy(locator = "magento.ordered.item.price")
private QAFWebElement productUnitPrice;

@FindBy(locator = "magento.ordered.item.subtotal")
private QAFWebElement productSubtotal;

OrderDetailsSite2.java

@FindBy(locator = "order.detail.product.name")
private QAFWebElement productName;

@FindBy(locator = "order.detail.product.uprice")
private QAFWebElement productUnitPrice;

@FindBy(locator = "order.detail.product.quantity")
private QAFWebElement productQuantity;

@FindBy(locator = "order.detail.product.subtotal")
private QAFWebElement productSubtotal;

两个类中的方法名称相同。

2 个答案:

答案 0 :(得分:0)

制作Components接口并实现它的组件类

interface Components{
...// declare all methods of your components like getProductList() etc
...
}

public void validateProductDetails(Components comp) {

OrderDetailBean bean = (OrderDetailBean) ConfigurationManager.getBundle().getObject("order_details");

for (int i = 0; i < bean.getProductName().size(); i++) {

    assertResult( comp.getProductList().get(i).getProductName().getText(), bean.getProductName().get(i));
    assertResult( comp.getProductList().get(i).getProductQuantity().getText(), bean.getProductQuantity().get(i));
    assertResult( comp.getProductList().get(i).getProductUnitPrice().getText(), bean.getProductUnitprice().get(i));
    assertResult(comp.getProductList().get(i).getProductSubtotal().getText(), bean.getProductSubtotal().get(i));
}

}

答案 1 :(得分:0)

编辑,来自更新的问题

从上面的代码中,我将使用这种方法。

创建一个界面,该界面将为您的订单详细信息网站提供通用的api。

entry: ['babel-polyfill', './src/index.js']

两个类都应实现您的接口

public interface class OrderDetailsComponent{
    private QAFWebElement productQuantity;
    private QAFWebElement productQuantity;
    private QAFWebElement productUnitPrice;
    private QAFWebElement productSubtotal;
}