Доброе время суток, есть проблема, не могу решить.
Есть некая BookingPage, у неё есть ряд общих локаторов и методов, но так же есть 3 различных её имплантации с дополнительными локаторами и методами, они зависят пока-что от 3х параметров(назовём их Х1,Х2,Х3). Мне не хотелось бы решать проблему банальным BookingХ1Page extend BookingPage и каждый раз в тестах писать BookingX1Page bookingX1Page = preBookingPage.order(); и далее работать уже с bookingX1Page, мне бы хотелось посредством какого-то патерна работать в самом тесте с BookingPage а на стороне Пейджей уже строить страницу из локаторов и давать нужные методы. Проблема ещё в том что у BookingX1Page и BookingX2Page есть одинаковый блок(он не один,это так для примера) ЖелаемыеУслуги(частично разные поля), когда как у BookingX3Page этого блока нет, есть совсем другой блок КонтактныеДанные, за-то у всех 3х страниц есть общий блок ОбщаяИнформация, только для каждой страницы там есть дополнительные спец.поля.
Я запилил по патерну builder preBookingPage там ситуация аналогичная, да я построил страницу наполняю блоки hashmaps нужными локаторами:
Базовые общие для всех страниц + уникальные для Х-параметра + Общие для комбинации Х1-Х2(использую интерфейсы для общих компбинаций) в зависимости от Х1,Х2,Х3, но вот у preBookingPage я вижу тьму левых методов Х1,Х2, которые мне не подходят так как я в данный момент использую в тесте Х3.
В общем начинаю подозревать что с добавлением новых параметров это будет просто не правильно, вдруг я приду пьяный на работу и хоть у меня страница собралась на основании Х1 я начну использовать методы для работы с Х3.
Если же просто использовать через BookingX1Page bookingX1Page = preBookingPage.order(); то это будет ужасная избыточность и куча повторений.
Подскажите, в какую сторону стоит смотреть паттерн/пример/шаблон, я бы действительно хотел работать только с BookingPage, имея доступ только к тем методам и локаторам которые доступны в зависимости от параметров.
ПС: извините за длинный пост и форматирование