На UI, естесственно, есть разные элементы (Text field, button, image, etc). С каждый элементов можно производить различные и уникальные только для него действия (печатать в текстовое поле, выбирать значение из списка и т.д).
Как лучше - создавать отдельный класс для каждого типа элементов и внутри него присущие методы? Нужен ли Интерфейс? Может быть в ЕНУМ засунуть все виды элементов?
Просто создать общий класс и запихнуть туда все-все методы работы с UI элементами - не годится, нужно разделять.
Также немаловажный вопрос - нужно добавить логирование, чтоб каждый interaction с элементом логировался.
В общем, вопрос в общепринятых подходах. Любые советы, ссылки и подскази очень приветствуются.
Вы идете по моему пути. В ENUM не надо будет каша. Интерфейс и классы для работы с контролами
вот примерно
PageObject:
addElement(parent, “Category”, “labeltext=‘Category’”, Combobox.class); //добавляем веб елемент
getWebComponent(“Category”).setValue(value); //что делать
Controls: //как делать
public class Combobox extends Any { @Override
public void setValue(final String val) {
log.info(" setValue: " + val);
… @Override
public String getValue() {
log.info(" getValue: ");
String value = ((WebElement) element).getAttribute(“value”);
log.info(value);
return value;
}
Возмоно вам стоит взглянуть на HtmlElements, но такой подход не очень хорош и имеет ряд недостатков. А для логгирования можно использовать WebDriverEventListner
Да полностью согласен, на основе элементов - это не есть гуд. Если так хочется выделять общие элементы, то можно использовать component page-object. И готовые обертки всегда лучше, когда нужно быстро и надежно делать автоматизацию, а так для себя можно конечно попробовать поизобретать велосипед, но зато получить ценный опыт набивания шишек. Вот отличная статься есть, в которой это и рассказывается Вам шашечки или ехать?
если ее слить себе и разобраться, то сможете найти то, что вам надо.
Я же в свою очередь просто перешел на “Selenide+PageObjects” и ушел от таких штук, поскольку потом начинается, что кликать можно не только на кнопку… Но еще и на линк и на т.д…