Как использовать обобщенный объект для 2 разных классов? - PullRequest
0 голосов
/ 04 сентября 2018

У меня есть 2 класса компонентов

  1. OrderDetailsSite1.java

  2. OrderDetailsSite2.java

У меня есть один класс бинов, в котором я храню детали корзины покупок

  • Наименование товара
  • Количество
  • Цена единицы
  • Итого

Теперь мне нужно создать один общий метод, в котором я должен передать объект класса Component и сравнить значения с данными класса бина.

Пробный код:

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 мне нужно повторить тот же код? или есть ли возможность сделать то же самое эффективным способом

EDITED

Я работаю с селеном, и я создал одну переменную и имя метода в обоих классах, но локаторы для обоих отличаются. Можно ли сделать то же самое, используя концепцию суперкласса?

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 голосов
/ 04 сентября 2018

РЕДАКТИРОВАТЬ , из обновленного вопроса

Из вашего кода выше, я бы использовал этот подход.

Создайте интерфейс, который предоставит общие API для ваших деталей заказа.

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

Оба ваших класса должны реализовывать ваш интерфейс

public class OrderDetailsSite1 implements OrderDetailsComponent{
    @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;
}

public class OrderDetailsSite2 implements OrderDetailsComponent {
    @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;
}
0 голосов
/ 04 сентября 2018

Создать интерфейс компонентов и реализовать его классы компонентов

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));
}

}
...