Здравствуйте. Интересует два вопроса по поводу автоматизации с Selenium WebDriver, хотелось бы узнать ответ от знающих людей.
В чем отличие Page Object от Page Factory?
Существую ли еще паттерны автоматизации тестирования кроме Page Object, Page Factory, Page Elements, если не брать в счет классические паттерны программирования?
Спасибо!
На данный момент в автоматизации (если вы идете, конечно, не на древний проект) вы не увидите на странице никаких пейджей для реализации PageObject. Будут блоки, которые подгружаются сразу, будут видимые и невидимые объекты с динамическим изменением состояния. Все уже настолько смешалось в кучу, что у вас не получится применить эти паттерны в чистом виде. Делайте архитектуру как вы ее видите и все. Блоки значит PageBlocks и тд. Эти паттерны были придуманы еще задолго до появления всяких ваших нодов, реактов и ангуляров и сейчас их актуальность стремится к нулю.
ИМХО, лучше сразу изучать design patterns (как минимум общие и наиболее часто используемые), SOLID + хорошенько освоить на практике принципы KISS, DRY, YAGNI, как писать масштабируемый код и прочее программерское.
Я использовал стратегию для работы с одним сайтом для разных стран, билдеры и фабричный метод для подготовки каких то страшных моделей. Попробуй посмотреть как другие пишут код. Выделить сам хорошие куски, и не фокусируйся только на тест автомейшн - людей тут меньше чем девелоперов, и хорошего кода тоже меньше.
Почитайте вот эту книгу Джерард Месарош - Шаблоны тестирования xUnit. Рефакторинг кода тестов - 2009
Здесь описаны все основные паттерны и запахи кода автотестов. Больше относится к юнит тестам но все принципы применимы и для других уровней тестирования. Очень рекомендую её для прочтения!
Очень хороший и интересный доклад!
Интересно узнать не пробовал ли заменять множественое наследование на составление обьектов из других обьектов?
Мне кажется что заимствование и связывание методов было более приемлемым чем движение по всей цепочке прототипов?
Но мне показалось что в таком случае IDE хуже поддерживает такие конструкции. Я например пользуюсь в основном TypeScript, и там можно имплементировать интерфейсы - частично помогает.