Принцип прост:
PageObject:
//----
Web elenements block
private SelenideElement name = $x(" xpath selector :) ");
//----
//---
Methods for interract with elements
pulbic PageObject typeNameIntoNameField(String name){
name.setValue(name);
return this;
}
//------
Вот это нормальный пэйдж обджект
В целом - это плохо, на мой взгляд.
Лучше научиться проставлять во фронте тестовые локаторы типа testid и такие простые вещи как setvalue не инкапсулировать в отдельные классы.
@Test
void loginTest() {
$t("login-input").setValue("abc");
...
}
Вполне прилично и читаемо выглядит, не только в тесте, но и в репорте.
Pageobject хорош для сложных вещей типа кастомных селектов, а то каждый чих потом куда-то упаковываем, миллион PO, от xpath рябит в глазах. В погоне за DRY наворачиваем ActionsPage extends BasePage implements Interactions
и вуаля - получаем трудноподдерживаемый говнофреймворк.
По опыту, фронтенд-разработчик обучает qa проставлять тестовые локаторы не более 2х часов (angular, react и т.п., с настройкой среды)