Первый постер. Я работаю в области автоматизации пользовательского интерфейса много лет, но только недавно познакомился с/получил инструкции по работе с объектной моделью страницы. Большинство из них основано на здравом смысле и включает в себя методы, которые я уже использовал, но есть одна тонкость, которую я не смог обосновать в своем собственном уме, несмотря на тщательный поиск хорошо обоснованного объяснения. Я надеюсь, что кто-то здесь может просветить меня, так как этот вопрос вызвал некоторое замешательство, поскольку я пытаюсь интегрировать POM с моими лучшими практиками.
С http://code.google.com/p/selenium/wiki/PageObjects:
Код, представленный выше, показывает важный момент: тесты, а не PageObjects, должны нести ответственность за утверждение о состояние страницы.... Конечно, как и в каждом руководстве есть исключения...
С http://seleniumhq.org/docs/06_test_design_considerations.html#chapter06-reference:
Существует много гибкости в том, как объекты страницы могут быть разработаны, но есть несколько основных правил для получения желаемого ремонтопригодность вашего тестового кода. Сами объекты страницы должны никогда не делайте проверки или утверждения. Это часть вашего теста и всегда должен быть в коде тестов, а не в объекте страницы. Объект страницы будет содержать представление страницы, а услуги, предоставляемые страницей с помощью методов, но нет кода, связанного с тем, что тестируемый объект должен находиться внутри объекта страницы.
Существует одна единая проверка, которая может и должна быть в пределах объект страницы, и это проверить, что страница, и, возможно, критические элементы на странице, были загружены правильно. Этот проверка должна выполняться при создании экземпляра объекта страницы.
Оба эти "руководства" допускают возможные исключения, но я не мог не согласиться с основной предпосылкой. Я привык выполнять значительную часть проверки в рамках "методов страницы", и я думаю, что наличие проверки - это мощный метод для поиска проблем в различных контекстах (т.е. проверка происходит каждый раз, когда вызывается метод), а чем только в ограниченном контексте конкретных тестов.
Например, давайте представим, что когда вы входите в свой AUT, появляется какой-то текст с надписью "зарегистрирован как пользователь". Целесообразно иметь один тест для конкретной проверки, но почему вы не хотите проверять его каждый раз, когда вызывается логин? Этот артефакт не имеет прямого отношения к тому, "правильно ли загружена" страница или нет, и он не имеет отношения к "тому, что тестируется" в целом, поэтому в соответствии с указаниями POM, приведенными выше, он явно НЕ ДОЛЖЕН быть в методе страницы.... но мне кажется, что это ДОЛЖНО быть, чтобы максимизировать мощность автоматизации, проверяя важные артефакты как можно чаще, с минимальным количеством обдуманных решений. Внедрение кода подтверждения в методы страницы увеличивает мощность автоматизации, позволяя вам получить много проверок "бесплатно", не беспокоясь об этом в своих тестах, и такая частая проверка в разных контекстах часто приводит к проблемам, которые вы НЕ найдете если проверка была ограничена, скажем, одним тестом для этого артефакта.
Другими словами, я склонен проводить различие между верификацией для конкретного теста и "общей" верификацией, и я считаю, что это вполне уместно/желательно для того, чтобы последняя широко использовалась в методах страницы. Это способствует более тонким тестам и более толстым объектам страниц, что, как правило, повышает удобство сопровождения тестов за счет повторного использования большего количества кода - несмотря на противоречивые утверждения в этих рекомендациях. Я упускаю суть? Каково реальное обоснование НЕ желая проверки в методах страницы? Является ли описанная мною ситуация фактически одним из "исключений", описанных в этих руководящих принципах, и поэтому на самом деле НЕ противоречит POM? Заранее спасибо за ваши мысли. -jn-