對大量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; } } }
浙公网安备 33010602011771号