Это правильное использование переключателя - PullRequest
0 голосов
/ 30 октября 2019

У меня есть переключатель с повторяющимися кодами внутри, как четыре из них (для стрелок, но есть и другие сценарии), единственное отличие которых - ArrowDown, ArrowUp, ArrowLeft и ArrowRight. Ниже приведен фрагмент кода:

    switch (peformAction) {
    case "ArrowDown":
        CommonFunctions.silentWait(1);
        actionToE.moveToElement(currentObject).perform();

        if (CommonFunctions.isElementDisplayed(currentObject)) {
            if (CommonFunctions.isElementEnabled(currentObject)) {
                if (!actionPar.isEmpty()) {
                    int intActionPar = Integer.parseInt(actionPar);
                    for (int i = 0; i < intActionPar; i++) {
                        currentObject.sendKeys(Keys.ARROW_DOWN);
                    }
                } else {
                    currentObject.sendKeys(Keys.ARROW_DOWN);
                }
                isActionSuccess = true;
            }
        }

        break;


    case "ArrowLeft":
        CommonFunctions.silentWait(1);
        actionToE.moveToElement(currentObject).perform();

        if (CommonFunctions.isElementDisplayed(currentObject)) {
            if (CommonFunctions.isElementEnabled(currentObject)) {
                if (!actionPar.isEmpty()) {
                    int intActionPar = Integer.parseInt(actionPar);
                    for (int i = 0; i < intActionPar; i++) {
                        currentObject.sendKeys(Keys.ARROW_LEFT);
                    }
                } else {
                    currentObject.sendKeys(Keys.ARROW_LEFT);
                }
                isActionSuccess = true;
            }
        }

        break;

Вопросы: 1.) Как улучшить этот код (предложение)? 2.) Было бы целесообразно поставить try catch на каждый случай?

1 Ответ

0 голосов
/ 30 октября 2019

Вы повторяете слишком много кода. Вы должны следовать принципу СУХОЙ , то есть Не повторяйте себя .

Два способа сделать это:

  • Используйте switch, чтобы присвоить различные значения переменной, затем иметь общий код после блока switch.

    Keys key;
    switch (performAction) {
        case "ArrowDown":
            key = Keys.ARROW_DOWN;
            break;
        case "ArrowLeft":
            key = Keys.ARROW_LEFT;
            break;
        ...
        default:
            throw new IllegalArgumentException("Unknown action: " + performAction);
    }
    
    CommonFunctions.silentWait(1);
    actionToE.moveToElement(currentObject).perform();
    
    if (CommonFunctions.isElementDisplayed(currentObject)) {
        if (CommonFunctions.isElementEnabled(currentObject)) {
            if (!actionPar.isEmpty()) {
                int intActionPar = Integer.parseInt(actionPar);
                for (int i = 0; i < intActionPar; i++) {
                    currentObject.sendKeys(key);
                }
            } else {
                currentObject.sendKeys(key);
            }
            isActionSuccess = true;
        }
    }
    
  • Переместить общий код в метод.

    switch (performAction) {
        case "ArrowDown":
            isActionSuccess = performAction(Keys.ARROW_DOWN, currentObject);
            break;
        case "ArrowLeft":
            isActionSuccess = performAction(Keys.ARROW_LEFT, currentObject);
            break;
        ...
    }
    
    private boolean performAction(Keys key, Xxx currentObject) {
        CommonFunctions.silentWait(1);
        actionToE.moveToElement(currentObject).perform();
    
        if (CommonFunctions.isElementDisplayed(currentObject)) {
            if (CommonFunctions.isElementEnabled(currentObject)) {
                if (!actionPar.isEmpty()) {
                    int intActionPar = Integer.parseInt(actionPar);
                    for (int i = 0; i < intActionPar; i++) {
                        currentObject.sendKeys(keys);
                    }
                } else {
                    currentObject.sendKeys(keys);
                }
                return true;
            }
        }
        return false;
    }
    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...