Коллеги, добрый день. Использую Page Object паттерн (в расширении Html Element). Собственно говоря возникла такая задача. Исходные данные. Есть страница с какой то формой для поиска. Забиваешь в нее данные жмешь Submit и возвращается страница с результатами поиска. С этим все понятно. Но есть ряд тест-кейсов - для которых Expected result страница с сообщением об ошибке причем в двух вариантах:
Просто белая страница, в которой сообщение содержится в тегах h4 в в вот таком блоке .search-results-intro
Вроде бы настоящая страница с результатами поиска, но в верхней части в div no_results, тоже будет сообщение об ошибке.
Считывание данных у нас происходит из Exel и заказчик, захотел поле где он проставив Yes или No, будет определять нужна ему страница с ошибкой (pass) или это реальная ошибка (fail). Пока даже не могу представить, можно ли как то это реализовать через Page Object, ведь я не могу вызвать из одного конструктора объекты двух классов.
Может кто нибудь сталкивался с похожей проблемой.
Плохо… очень плохо расписали требования.
Это не проблема, если помнить об ООП. Тут либо наследование напрашивается с ErrorPage родителем + 2 child pages (ваши 2 состояния). Либо - композиция, когда ваш эрор представляется в виде отдельного компонента и встраивается в пейджу. А в зависимости от того, где мы сейчас находимся (результирующий пейдж), возвращает текст по одному из двух локаторов. В общем, вариантов решения достаточно.
Да тут и опыта особого не нужно. Оба варианта достаточно простые в имплементации. В первом случае можно даже обойтись без абстрактной страницы и заменить ее интерфейсом с методом получения текста ошибки. В обоих пейджах он будет переопределен, а в зависимости от возвращаемого типа будет вызываться нужный геттер. Можно вообще забить на все, создать 2 локатора и, в зависимости от результирующей страницы, вытягивать текст из нужного. Если конечно в тех страницах больше ничего не нужно кроме эрора. Я ведь не знаю всех нюансов, посему могу лишь выдвигать предположения.
Хотя сомнения остаются. Итак я создал интерфейс с одним единственным методом
public interface ErrorPage {
public String getErrorMessage();
}
Есть два класса реализующих его
public class BlankErrorPage implements ErrorPage {
@Override
public String getErrorMessage() {
return null;
}
}
public class lResultsPage extends PageBase implements ErrorPage
Но мои сомнения остаются при мне. Если есть всего один метод
ResultsPage ResultsPage = HomePAge.startSearch();
который может вернуть или ту или другую страницу - как выйти из этой ситуации.
То есть в интерфейсе ErrorPage, так же должен быть определен и переопределен в классах реализующих этот интерфес метод
startSearch()
или я что то не так понял
Ваш метод должен возвращать тип интерфейса. Но в зависимости от возвращаемого объекта, вы будете ссылаться на конкретную имплементацию getErrorMessage().
Я на основе вышеприведенных советов, взял за основу не наследование от ErrorPage (все страницы унаследованы от классе Page), а реализацию интерфейса ErrorPage, вроде что то начало получаться.