2015-12-16 4 views
6

У меня есть ситуация, когда я хочу определить разнообразие поведения для моих полей.java: как автогенерировать настраиваемый метод для переменной

class SomePage { 
    //... 

    @FindBy(id = "selectEthinicity") 
    private WebElement ethinicitySelect; 

    @FindBy(id = "someId") 
    private WebElement usernameInputField; 

    @FindBy(id = "buttonSubmit") 
    private WebElement submitButton; 


    public void selectEthnicity(String param) throws Exception { 
     new Select(ethnicitySelect).selectByVisibleText(param); 
    } 

    public void selectEthnicityByIndex(String param) throws Exception { 
     new Select(ethnicitySelect).selectByIndex(Integer.parseInt(param)); 
    } 

    public int getSelectEthinicityNumberOfOptions() { 
     new Select(ethnicitySelect).getOptions().size();  
    } 

    public void waitForOptionOfSelectEthnicityToLoad() { 
     //logic to wait for an options of Ethinicity to load 
    } 

    public void selectEthnicity_Wait(String param) throws Exception { 
     //wait 
     //select Ethinicity 
    } 

    public void selectEthnicityByIndex_Wait(String param) throws Exception { 
     //wait and 
     //Select Ethnicity by einde 
    } 


    //custom method for input Field 
    public String getUsernameInputFieldValue() { 
     usernameInputField.getAttribute("value"); 
    } 

    public void enterUsernameInputField(String param) { 
     usernameInputField.sendKeys(param); 
    } 


    //custom method for button 
    public void clickSubmitButton() throws PageValidationException { 
     submitButton.click(); 
    } 

    //... 
} 

Здесь у меня есть класс SomePage, который является Page Object (Использование страницы Factory Pattern), которые состоят из полей (WebElement).

Основываясь на суффиксе имен полей, мне нужно создать число методов. Если суффикс *Select, в поле будет количество методов, которые могут быть похожими для всех select field. Если суффикс равен *Button, он будет иметь метод, который необходим для button field.

Могу ли я создать пользовательский метод, основанный на suffix of field names.

ПРИМЕЧАНИЕ. IntelliJ поддерживает модификацию пользовательских Getters и Setters, но не допускает использование нескольких методов для каждого поля. Он ограничивает 1 Getter и 1 Setter в поле. Например, это не всегда так. У меня есть несколько setter (тип сеттера) или getter для поля.

+0

Вы можете посмотреть на [Project Ломбок] (https://projectlombok.org/index.html) –

+0

И Propably АОП. –

+0

Есть ли причина, по которой вы не можете создать класс Radio/Button, который имеет определенные функции? Вы могли бы даже сделать суперкласс и расширить его, а затем все, что вы использовали бы в классе Temp, будут получателями и сеттерами для отдельной кнопки/радио, а затем вызовите его методы getter/setter. – Compass

ответ

0

Генерация Геттеры и сеттеры в IntelliJ IDEA:

  1. В главном меню выберите код. В качестве альтернативы щелкните правой кнопкой мыши редактор и выберите «Создать в контекстном меню» или используйте сочетание клавиш «Alt + Insert».
  2. В всплывающем списке, который отображается в редакторе, выберите один из следующих параметров: Getter Метод доступа для получения текущего значения выбранных полей. Setter Mutator метод для установки заданных значений в выбранные поля. Getter and Setter Оба метода для выбранных полей.
  3. В диалоговом окне «Выбрать поля для генерации Getters and Setters» выберите нужные поля. Вы можете добавить пользовательский сеттер или getter, нажав browseButton и получить доступ к диалоговому окну Getter/Setter Templates. Если геттеры и сеттеры для поля уже существуют, это поле не входит в список.
  4. Нажмите OK.
    Для получения дополнительной информации перейдите к link
+0

. Getter and Setter дает только простой getter и setter. Мне нужно сделать некоторые другие вещи для этих переменных. Пробный пользовательский геттер и сеттер. Я не могу добавить несколько геттеров/сеттеров. –

+0

@AmanTuladhar. Что вы имеете в виду: я не могу добавить несколько геттеров/сеттеров – Abdelhak

+0

например, у меня есть переменная x .. если я автоматически генерирую getter и setter. У меня может быть один getter для x и один setter или x .. но посмотрите на мой пример. У меня есть много методов для одной переменной. Не просто getter и setter. Мне нужны те, которые будут сгенерированы автоматически. –

0

можно генерировать пользовательские классы, но поколение динамического класса является довольно расширенными функциями, и от звуков вашей проблемы это излишне сложным.

Я думаю, вы должны создать новый класс для этих объектов с одинаковой функциональностью. Вы должны прочитать об объектно-ориентированном программировании, потому что это довольно простая концепция. Возможно, ваш пример плохой, но почему вы переопределяете функции String для каждой кнопки? Вот пример другой конструкции:

public class Button { 
    private String text; 

    public Button(String text) { 
     this.text = text; 
    } 

    public void setText(String text) { 
     this.text = text; 
    } 

    public String getText() { 
     return text; 
    } 
} 

Тогда просто объявите кучу своего нового класса.

class Temp { 
    Button abcButton = new Button("abc"); 
    Button cdeButton = new Button("cde"); 

     // Instead of setAbcButtonToLower() 
     abcButton.setText(abcButton.getText().toLowerCase()); 
     // Instead of getAbcButtonIndexOfChar() 
     abcButton.getText().indexOf(c); 
     // Instead of getAbcButtonSize() 
     abcButton.getText().length(); 
} 
+0

Код, который я добавил, это всего лишь пример кода ... Я на самом деле не выполняю эти действия в String .... Я просто хотел показать вам, что мне нужно простым способом. Не могли бы вы просмотрите мой вопрос, снова игнорируя, что моя переменная как строка. Я просто хочу, чтобы пользовательские методы описывали поведение для этой переменной. –

+0

Я думаю, что мой ответ по-прежнему применяется. Создайте класс со всеми вашими общими операциями, определенными в нем. – Samuel

+0

Использование суперклассов и подклассов было бы моим подходом к этому, а не индивидуально подобранными методами для каждого объекта. Если каждый объект использует те же точные методы, то эти методы должны применяться на уровне объекта. – Compass

-4

Вы не можете создавать собственные методы автоматически. Для пользовательских методов вы должны определить их, поэтому он называется custom. лучшее, что вы можете получить только основные методы получения и установки, я думаю, что вы уже получили эти
или вы можете сделать это, как этот Button класс { кнопки строки }

класса buttonProperties {

Int buttonLength; int buttonSize;

общественного ИНТ getbuttonSize() {

return buttonSize; 

} . . .

}

+0

Это очень неправильно. Ломбок соответствующим образом передает код. –

Смежные вопросы