Всем привет!
Проблема следующего характера:есть некий кор, дефолтный функционал и есть модули, каждый из которых как-то изменяет-дополняет этот функционал. И есть проекты, которые сосотоят из кор функционала и различных наборов модулей.
Как это выглядит на практике:
Например, есть форма логин дефолтная. И есть модуль 1 - которыый добавляет к этой форме пару новых кнопок и модуль 2, который добавляет чекбокс.
В проекте мы используем пейджы и блоки - каждая страница собирается из блоков.
Есть дефолтный блок логин формы. Есть блок логин формы+модуль 1, логин формы+модуль 2.
Предположим у меня на прокте установлен модуль 1: тут все просто, я в логин пейдже этого проекта буду использовать блок логин форма+модуль 1. То же самое есть используется только модуль 2.
А вот как быть если используются оба модуля? Включать в пейджу оба блока - которые по сути одинаковые кроме пары дополнительных кнопок? Делать отдельный класс логин форма + модуль 1 + модуль 2 - но таких модулей может быть, скажем, не 2, а 5 - и количество возможных комбинаций будет расти?
Пока ничего лучше варианта 1 - включать оба блока с изменениями от модуля 1 и от модуля 2 я не придумала. Но выглядит это жутко неуклюже и мне кажется я упускаю из виду какой-то третий вариант.
Upd:
Core:
LoginForm extends BasePage {
private WebElement username;
private WebElement password;
//Геттеры, сеттеры для полей
}
Loginage extends BasePage{
private LoginForm loginForm;
//Другие блоки, геттеры для дотупа к ним
}
Module 1:
LoginFormModule1 extends LoginForm{
private WebElement additionalButton1;
}
Module 2:
LoginFormModule2 extends LoginForm{
private WebElement addtionalButton2;
}
Project 1 uses only core+module 1:
LoginPageProject1 extends LoginPage{
//вместо дефолтной логин формы подставляем форму расширенную модулем 1
private LoginFormModule1 loginForm;
}
Project 2 uses core + module 1 + module 2
LoginPageProject2 extends LoginPage{
//И вот здесь начинается проблема
//Вариант 1 - добавить оба блока логин формы - с расширением от модулей 1 и 2
private LoginformModule1 loginFormModule1;
private LoginFormModule2 loginFormModule2;
//Вариант 2 - создать блок LoginFormModule1Modiule2 и включить его в класс пейджы
private LoginFormModule1Module2 loginForm;
}