Помогите организовать работу с элементами страницы

На 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

спасибо за советы. От HtmlElements на данном этапе откажусь. Вопрос скорее касательно архитектуры. Есть еще советы?

Не писать тесты на основе элементов, а писать на основе бизнес действий с формой/страницей.
Использовать готовые обёртки над селениумом в соответствии с вашими знаниями в языках, не писать своих обёрток.
Список обёрток/фреймворков посмотри здесь GitHub - atinfo/awesome-test-automation: A curated list of awesome test automation frameworks, tools, libraries, and software for different programming languages. Sponsored by https://zapple.tech

1 лайк

Да полностью согласен, на основе элементов - это не есть гуд. Если так хочется выделять общие элементы, то можно использовать component page-object. И готовые обертки всегда лучше, когда нужно быстро и надежно делать автоматизацию, а так для себя можно конечно попробовать поизобретать велосипед, но зато получить ценный опыт набивания шишек. Вот отличная статься есть, в которой это и рассказывается Вам шашечки или ехать?

Вот тут погляди, я когда-то занимался такой фигней и мне помогло вот это - Java 8 интерфейсы под микроскопом. Part 2 - универсальный ElementsSupplier

вот репка - web-automation-framework/core/src/main/java/com/blogspot/notes/automation/qa/elements at master · sskorol/web-automation-framework · GitHub

если ее слить себе и разобраться, то сможете найти то, что вам надо.

Я же в свою очередь просто перешел на “Selenide+PageObjects” и ушел от таких штук, поскольку потом начинается, что кликать можно не только на кнопку… Но еще и на линк и на т.д… :slight_smile: