Давненько не писал ничего околотехнического, и сегодня про вопрос с собеседований "А какие паттерны знаешь"?
Что я думаю про PageObject и гордо звучащий PageFactory, про которые вспомнят 9 из 10 на этот вопрос?
Первое - это не "паттерн" в прямом смысле этого слова. В том смысле, что если мы будем делать ООП-программу про зоопарк, там будет обект "Жираф" с полями "
private вес" и "private рост" и методами "поесть()" / "поспать()". Так же будет объект "Зебра" и объект "Вомбат". Можно ли сказать, что мы изобрели паттерн "ЗверьОбжект"? В нашей системе каждый зверек это объект. в котором есть свойства (поля) и методы, через которые мы взаимодействуем с ним.Так вот, Web-тесты на Java (и другом любом ООП языке) - и есть программка про зоопарк (про веб-странички), и PageObject - это просто класс с полями и методами, описывающий предметную область. И если понимать это, то легко понять и точку зрения, например, Андрея Солнцева: "PageObject не всегда и не очень-то и нужен". Ровно в той же степени, как класс (объект) "Жираф" может быть не очень то и нужен, если в нашем зоопарке с ним не так уж и много взаимодействий. И если дизайн этого класса сделан плохо.
А PageFactory - это чтение аннотаций в классе, которому придумали нелепое название. Это не имеет никакого отношения к Factory - который, сам по себе, хороший паттерн и встречается часто.
А еще я встречал точку зрения, что если методы в PageObject возвращают ссылку this, то это PageFactory. Что тут сказать? Я не знаю откуда взялось мнение, что это так называется. В ООП у этого есть вполне конкретное название - Fluent interface.
Поэтому не надо на собеседовании говорить, что вы знаете паттерны PageObject и PageFactory.
На такой вопрос лучше ответить так:
Если вы меня спрашиваете про "паттерны тестировщиков" и хотите послушать про PageObject - я вам расскажу, но если вас интересует понимаю ли я, что такое Decorator, Singleton, Proxy, Factory (настоящую) - то сейчас я вам расскажу про них.
И рассказать 🙂