Проблемы проектирования в отношении шаблона объектной модели страницы - PullRequest
0 голосов
/ 26 ноября 2018

Интересно, что-то не так с нашим подходом к POM?Во многих примерах в Интернете я обнаружил, что этот шаблон используется таким образом, чтобы ваш тестовый скрипт выглядел следующим образом:

pageObject.doSomethingWithElement(parameters...)

Для нас было более естественно сделать это следующим образом:

pageObject.element.doSomething(parameters...)

Таким образом, нам не нужно реализовывать то, что можно сделать с помощью элемента в классе страницы, а просто определить эти действия в тестовом скрипте.По какой-то причине это показалось нам более естественным, подобно тому, что вместо

System.printlnOut()
System.printlnErr()

есть

System.out.println()
System.err.println()

. Неужели мы упускаем некоторые недостатки нашего подхода?

1 Ответ

0 голосов
/ 26 ноября 2018

При выборе между этими двумя моделями нет никаких преимуществ или недостатков.Но я думаю, что вы немного не понимаете рекомендуемый подход.Идея не в том, чтобы pageObject.doSomethingWithElement, а в том, чтобы что-то сделать с функциональностью страницы, pageObject.doSomething, если хотите.

Если вы посмотрите на примеры Selenium , например, одним из первых примеров будет public HomePage loginAs(String username, String password).Ничто в этой функции не относится к элементам, оно касается функциональности страницы, легко выражаемой в устной форме, без какой-либо ссылки на задействованные элементы.Я могу прочитать эту функцию как: когда пользователь находится на странице входа в систему, и пользователь вводит имя пользователя и пароль, при успешном входе пользователь перенаправляется на домашнюю страницу .Какой вид обеспечивает естественную BDD-интерпретацию модели страницы.

Преимущество такого подхода состоит в том, что ваши тесты гораздо более читабельны.Вместо чего-то вроде:

loginPage.username.setValue(...)
loginPage.password.setValue(...)
loginPage.loginButton.submit()
// how do I get a homepage from here?

эта модель позволяет иметь

HomePage homePage = loginPage.loginAs(...)

Готово!

Также с точки зрения обслуживания: если разработчики изменяют элементы на странице входа, этоможет быть важно для 20 тестов, которые касаются функциональности входа в систему.Но вы хотите, чтобы другие тесты 980 не влияли на их изменение, поскольку они используют логин только для проверки других частей функциональности.Таким образом, они могут не обращать внимания на изменения в элементах входа в систему, пока сам вход в систему работает должным образом.

Поэтому я думаю, что выбор не между различными способами, с помощью которых ваша страница может выражать функции, связанные с элементами, а сдолжна ли ваша страница вообще выражать элементы или концентрироваться на функциональности, которую она предоставляет, независимо от элементов.

Я рекомендую прочитать ту страницу, которую я цитирую здесь, она дает очень хорошее представление о том, что такое модель страницы.

...