Есть отличная удаленная работа для php+codeception+jenkins+allure+docker спецов. 100% remote! Присоединиться к проекту

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

webdriver
java
Теги: #<Tag:0x00007f7b704e70d0> #<Tag:0x00007f7b704e6f90>

(Vital) #1

На UI, естесственно, есть разные элементы (Text field, button, image, etc). С каждый элементов можно производить различные и уникальные только для него действия (печатать в текстовое поле, выбирать значение из списка и т.д).

Как лучше - создавать отдельный класс для каждого типа элементов и внутри него присущие методы? Нужен ли Интерфейс? Может быть в ЕНУМ засунуть все виды элементов?

Просто создать общий класс и запихнуть туда все-все методы работы с UI элементами - не годится, нужно разделять.

Также немаловажный вопрос - нужно добавить логирование, чтоб каждый interaction с элементом логировался.

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


(Vladislav Kulasov) #2

Вы идете по моему пути. В 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;
}


(Valentin Buryakov) #3

Возмоно вам стоит взглянуть на HtmlElements, но такой подход не очень хорош и имеет ряд недостатков. А для логгирования можно использовать WebDriverEventListner


(Vital) #4

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


(Roma Marinsky) #5

Не писать тесты на основе элементов, а писать на основе бизнес действий с формой/страницей.
Использовать готовые обёртки над селениумом в соответствии с вашими знаниями в языках, не писать своих обёрток.
Список обёрток/фреймворков посмотри здесь https://github.com/atinfo/awesome-test-automation


(Valentin Buryakov) #6

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


(Eugene Moskalenko) #7

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

вот репка - https://github.com/sskorol/web-automation-framework/tree/master/core/src/main/java/com/blogspot/notes/automation/qa/elements

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

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