В чем может быть прецедент для возврата объекта в шаблоне проектирования фабрики страниц?

Я просмотрел Интернет, чтобы получить соответствующую информацию, но безуспешно. Пример кода приведен ниже:

public class HomePage 
{
    @FindBy(id = "fname")
    WebElement name;

    @FindBy(id = "email")
    WebElement email;

    @FindBy(id = "password")
    WebElement password;

    @FindBy(id = "passwordConf")
    WebElement confPassword;

    public HomePage fillFormDetails(String firstname, String emailid)
    {
        name.sendKeys(firstname);
        email.sendKeys(emailid);

        return this;
    }

    public void fillPass(String pass)
    {
        password.sendKeys(pass);

    }   
}

Я хочу знать, почему мы возвращаем объект при вызове метода fillFormDetails(String firstname, String emailid)?

Какие могут быть варианты использования, чтобы мы могли использовать это для управления эффективностью нашего кода?


person NarendraR    schedule 09.08.2017    source источник


Ответы (2)


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

HomePage homePage = new HomePage();
homePage
    .fillFormDetails(firstName, email)
    .fillPass(pass);

В качестве побочного примечания, лучший дизайн - разделить все действия на отдельные методы, а не только на некоторые из них.

public HomePage fillFirstName(String firstName)
{
    name.sendKeys(firstName);

    return this;
}

public HomePage fillEmail(String email)
{
    email.sendKeys(email);

    return this;
}

public void fillPass(String pass)
{
    password.sendKeys(pass);
}

И в тесте

HomePage homePage = new HomePage();
homePage
    .fillFirstName(firstName)
    .fillEmail(email)
    .fillPass(pass);
person Guy    schedule 09.08.2017

Это называется объединением методов. подробнее здесь. https://en.wikipedia.org/wiki/Method_chaining#Java

Предположим, у вас есть три метода в одном классе для заполнения имени пользователя, ввода пароля и, наконец, отправки формы.

Обычно вы создаете объект страницы и вызываете их отдельно, используя объект. что-то вроде этого,

MethodChaining methodChaining = new MethodChaining();
methodChaining.fillUserName("username");
methodChaining.fillPassword("password");
methodChaining.submit();

однако, если вы вернете объект того же класса this, вы можете связать методы следующим образом.

Иногда это удобно, да и хорошо смотрится :)

public class MethodChaining {

    public MethodChaining fillUserName(String username){
        return this;
    }

    public MethodChaining fillPassword(String password){
        return this;
    }

    public MethodChaining submit(){
        return this;
    }

    public static void main(String args[]){
        MethodChaining methodChaining = new MethodChaining();
        methodChaining.fillUserName("abc")
                .fillPassword("pass")
                .submit();
    }
}

Теперь, когда использовать это в автоматизации или нет, полностью зависит от человека и поведения приложения.

если у вас строгий единый поток, то с множеством потоков действительно сложно справиться. Это могло быть хорошо.

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

person Gaurang Shah    schedule 09.08.2017