Удаленка для jenkins+selenide+selenoid+allure+docker спецов на 2-3 часа в день. 100% remote! Присоединиться к проекту

Как реализоать Page Object , если блок страницы может изменяться, и существовать или не существовать на двух старницах одновременно

design-patterns
csharp
framework
page-object
java
webdriver
Теги: #<Tag:0x00007fedb84ecdb8> #<Tag:0x00007fedb84ecc78> #<Tag:0x00007fedb84ecb10> #<Tag:0x00007fedb84ec930> #<Tag:0x00007fedb84ec7f0> #<Tag:0x00007fedb84ec6b0>

(Viktor Yakushenko) #1

Может кто пытался сделать Page Object для случая когда в страницы динамически добавляются блоки. Можно конечно сделать чтобы эти блоки всегда были в этом Page object, но интересно рассмотреть другие варианты. Возможно есть альтернативный паттерн

Пример желательно на C#/Java

Зачем? Хочется Fluent интерфейс использовать)


(Vladimir Sokolov) #2

Виктор, здравствуйте!

Попробуйте изучить информацию о html elemets:

  1. Опишите поведение элемента/состояния
  2. Вынесите в отдельный пакет этот элемент
  3. Подключайте элемент на нужные страницы.

(Alexandr D ) #3

Авто хочет немного другого, насколько я понял.

Если с использованием композиции добавлять блоки на страницу, то они как бы всегда там будут, даже если на странице этого блока не должно быть, пока вы строчку с ним не уберёте из кода страницы.

Автор же хочет, чтобы эти блоки динамически добавлялись в код страницы, в зависимости от чего-то там. :slight_smile:


(Александр Илюшкин) #5

А я вот считаю, что логику поведения нельзя зашивать в код. Она должна быть только на уровне тестов. В противном случае, такой фреймворк и тесты на нем будет тяжело поддерживать. Таким образом, я бы просто сделал отдельный класс на этот динамический элемент и в тесте описал примерно следующее

  • если например есть кукисы
  • проверить, что такого блока нет

Второй тест

  • если нет кукисов
  • проверить, что такой блок есть
  • проверить, что клик на блок открывает страницу N.

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


(Viktor Yakushenko) #6

Да, согласен что излишество, но иногда интересно поэкспериментировать. Вообще подобное поведение я реализовал с помощью Generics, в случае когда один попап может вернуть несколько страниц, для того чтобы поддерживать Fluent Interface и не писать закрытие попапа для каждой страницы.

Но в конкретном случае нам нужно при открытии страницы передать тип блока и блоку передать тип страницы чтоб могли на нее вернутся по контексту, в итоге мы замыкаемся по кругу PageObject<Frame<PageObject>>