對大量if else結構的重構

主要有兩個辦法 : 

1 用enum , 2 講方法放入map , 然後反射.

直接上代碼 : 

package com.officedepot.jbehave.bsd.pages;

import java.util.List;

import org.openqa.selenium.By;
import org.openqa.selenium.WebElement;

import com.officedepot.test.jbehave.BasePage;

public class SkuDetailPage extends BasePage {

    private WebElement addToListButton;
    private WebElement addToCartButton;
    private WebElement qtyBox;
    private WebElement skuDesc;
    private WebElement showAllListButton;
    private WebElement startNewListButton;
    private WebElement manageListButton;
    private WebElement chooseDefaultListLink;
    private WebElement chooseRecentlyListLink;
    private WebElement addSKUToListButton;
    private WebElement myShoppingListsLink;
    private WebElement customizeSKUButton;

    private static SkuDetailPage thisPage = new SkuDetailPage();

    private By pageVerifyItem = By.cssSelector("#siteBreadcrumb");

    public boolean isInCurrentPage() {
        return isPageLoaded(pageVerifyItem, "Product Details");
    }

    public String getPageLink() {
        return getCurrentUrl();
    }

    public boolean isBrandElementVisible(String value) {
        boolean result = false;
        List<WebElement> cbxRefineList = findElementsBy(By.cssSelector(".refV2"));
        for (WebElement li : cbxRefineList) {
            if (li.getAttribute("href").contains(value)) {
                result = true;
                break;
            }
        }

        return result;
    }

    public void clickAddToList() {
        addToListButton = findElementBy(By.name("cmd_addCSL.button.INDEX[0]"));
        clickOn(addToListButton);
    }

    public void addToCSLList() {
        // there is a link called "Save Cart To List" got same function as
        // "add to list" in other module.
        addToCSLList(getCurrentUrl());
    }

    private void addToCSLList(String url) {
        clickBy(RedirectEnum.getInstance(url).getBy());
    }

    public void showAllList() {
        showAllListButton = findElementBy(By.id("showAllShoppingLists"));
        clickOn(showAllListButton);
    }

    public void startNewList() {
        startNewListButton = findElementBy(By.id("createListButton"));
        clickOn(startNewListButton);
    }

    public void clickManageList() {
        manageListButton = findElementBy(By.id("manageListButton"));
        clickOn(manageListButton);
    }

    public void chooseDefaultList() {
        chooseDefaultListLink = findElementBy(By.cssSelector(".th1 a"));
        clickOn(chooseDefaultListLink);
    }

    public void chooseRecentlyList() {
        chooseRecentlyListLink = findElementsBy(By.cssSelector(".th1 a")).get(1);
        clickOn(chooseRecentlyListLink);
    }

    public void addSkuToPopupLightBoxList() {
        addSKUToListButton = findElementBy(By.id("addToListShopping"));
        clickOn(addSKUToListButton);
    }

    public void clickMyShoppingListsLink() {
        myShoppingListsLink = findElementBy(By.linkText("My Shopping Lists"));
        clickOn(myShoppingListsLink);
    }

    public boolean containSkuDel(String detail) throws Exception {
        boolean result = false;
        skuDesc = findElementBy(By.cssSelector("div#skuHeading > h1.fn"));
        if (skuDesc.getText().equals(detail)) {
            result = true;
        }
        return result;
    }

    public void addToCart() throws Exception {
        WebElement addSkuButton = findElementBy(By.name("cmd_addSKU.button.INDEX[0]"));
        clickOn(addSkuButton);
    }

    public void addSkusToCartWithQtyAndCheckout(String qty) throws Exception {
        qtyBox = findElementBy(By.id("mainqtybox"));
        typeTextBox(qtyBox, qty);
        addToCartButton = findElementBy(By.name("cmd_addSKU.button.INDEX[0]"));
        clickOn(addToCartButton);
    }

    public void addSkusToCartWithQty(String qty) throws Exception {
        qtyBox = findElementBy(By.id("mainqtybox"));
        typeTextBox(qtyBox, qty);
        addToCart();
    }

    public void customizeSKU() {
        customizeSKUButton = findElementBy(By.id("buttonCustomize2"));
        clickOn(customizeSKUButton);
    }

    public boolean isRefurbishedICONPresent() {
        boolean result = false;
        WebElement refurbishedLiElement = findElementBy(By.id("icon.refurbished"));
        if ("Refurbished".equals(refurbishedLiElement.getText())) {
            result = true;
        }
        return result;
    }

    public boolean isInstantRebateDataAvailable() {
        WebElement savingsElement = findElementBy(By.cssSelector(".savings>th"));
        return savingsElement.getText().trim().equalsIgnoreCase("Instant Savings");
    }

    public boolean isMinQtyAndQtyIncreamentDataAvailable() {
        boolean result = false;
        WebElement minQtyElement = findElementBy(By.id("skuMinimumQtyDisplay"));
        WebElement qtyIncrElement = findElementBy(By.id("skuIncrementQtyDisplay"));
        if (minQtyElement.getText().contains("MIN. QTY") && qtyIncrElement.getText().contains("INCREMENTS OF")) {
            result = true;
        }

        return result;
    }

    public boolean isMinQtyOrQtyIncrErrMsgReported() {
        boolean result = false;
        WebElement divElement = findElementBy(By.cssSelector(".blue-msgbox"));
        String errorText = divElement.getText();

        if (errorText.contains("Sorry. You have not met the minimum quantity") || errorText.contains("Sorry. This item must be ordered in increments")) {
            result = true;
        }

        return result;
    }

    public boolean isMailInRebateDataAvailable() throws Exception {
        boolean result = false;
        WebElement rebateFormElement = findElementBy(By.linkText("Mail-in Form"));

        if (rebateFormElement.isDisplayed() && isTextPresentOnPage("Mail-in Savings")) {
            result = true;
        }

        return result;
    }

    private enum RedirectEnum {

        shoppingCart("cart/shoppingCart.do") {
            @Override
            public By getBy() {
                return By.name("cmd_saveToList.button.CSLINDEX[0]");
            }
        },
        quickAddBySku("csl/quickAddBySku.do") {
            @Override
            public By getBy() {
                return By.name("cmd_addCSL.button.INDEX.byItem[0]");
            }
        },
        orderHistoryDetail("orderhistory/orderHistoryDetail.do") {
            @Override
            public By getBy() {
                return By.name("cmd_addList.button.CSL");
            }
        },
        skuRouter("catalog/skuRouter.do") {
            @Override
            public By getBy() {
                List<WebElement> qtyFields = thisPage.findElementsBy(By.cssSelector(".textfield"));
                thisPage.typeTextBox(qtyFields.get(random.nextInt(qtyFields.size())), String.valueOf(1));
                return By.name("cmd_addCSL.button");
            }
        },
        searchRouter("catalog/searchRouter.do") {
            @Override
            public By getBy() {
                return By.name("cmd_addList.button.CSLINDEX[0]");
            }
        },
        browseCatalog("catalog/browseCatalog.do") {
            @Override
            public By getBy() {
                By by = null;
                List<WebElement> qtyFields = thisPage.findElementsBy(By.name("entryFormList[0].qty"));
                if (qtyFields.size() > 1) {
                    by = By.name("cmd_addList.quickView.button.INDEX[0]");
                } else {
                    by = By.name("cmd_addList.button.INDEX[0]");
                }

                return by;
            }
        },
        checkout("cart/checkout.do") {
            @Override
            public By getBy() {
                return By.name("cmd_saveCartToList.button.CSL");
            }
        },
        checkoutRouter("cart/checkoutRouter.do") {
            @Override
            public By getBy() {
                return By.name("cmd_saveCartToList.button.CSL");
            }
        },
        defaultCondition("cart/checkoutRouter.do") {
            @Override
            public By getBy() {
                return By.name("cmd_addCSL.button.INDEX[0]");
            }
        };

        public abstract By getBy();

        private String URL = "";

        private RedirectEnum(String URL) {
            this.URL = URL;
        }

        public static RedirectEnum getInstance(String siteURL) {
            for (RedirectEnum redirectAction : RedirectEnum.values()) {
                if (siteURL.contains(redirectAction.URL)) {
                    return redirectAction;
                }
            }
            return defaultCondition;
        }
    }

}

 

posted on 2014-06-10 15:18  饕盡天下  阅读(191)  评论(0)    收藏  举报