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

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

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

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

1 лайк

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

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

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

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

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

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

1 лайк

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

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

Второй тест

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

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

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

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