Page Object: использование классов Steps

Добрый день!

Я юзаю, как и многие тут, паттерн Page Object.
Класс главной страницы получается у меня довольно большим, так как на проекте по сути одна главная страница и портлет в ней.

И получается этот класс MainPage прилично большим.
Большой он не из-за того, что я в нем же описываю локаторы (локаторы я вынес в отдельные классы-блоки - заюзал HtmlElement от яндекса).
А большой он из-за кол-ва функций в этом классе.
Я эти функции структурировал, ограничил их комментами типа

/**
 * ================== Base Steps ==================
 */

public MainPage func1() {
    ...
    return this;
}

public MainPage func2() {
    ...
    return this;
}

/**
 * ================== Navigation Steps ==================
 */


public MainPage func3() {
    ...
    return this;
}


public MainPage func4() {
    ...
    return this;
}

Как-то я наткнулся на понятие степов. ЧТо вся логика описывается в них…

Вот не могу понять, какое место в общей структуре этих Степ-классов.
Может есть какая-то информация, идеи и так далее?

Степ-классы используются уже в тестах,а само взаимодействие с элементами страницы в Page Object
Получится что-то вроде:

class TestClass{

       public void test(){
       LoginPageSteps lps = new LoginPageSteps();
       lps.login();
      }
}

class LoginPageSteps(){
    LoginPage loginPage;

    public LoginPageSteps(){
        loginPage= new LoginPage();
    }

    public void login(){
        loginPage.inputPassword();
        loginPage.inputUsername();
        loginPage.pressLoginButton();
    }
}

class LoginPage{
    public void inputPassword(){}
    public void inputUsername(){}
    public void pressLoginButton(){}
}

Похожая реализация есть в фреймворке Serenity может там будет в доках наглядней.
http://www.thucydides.info/docs/serenity/#introduction

2 лайка

то есть, Степ-классы это связующее звено, между Тест-классами и Пейдж-классами?

да, как правило используют степ-классы или бизнес, как кому угодно. Это позволит вам вынести бизнес логику в отдельный класс, а взаимодействие с элементами самой страницы оставить в PageObject.

1 лайк