При выборе между этими двумя моделями нет никаких преимуществ или недостатков.Но я думаю, что вы немного не понимаете рекомендуемый подход.Идея не в том, чтобы 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 не влияли на их изменение, поскольку они используют логин только для проверки других частей функциональности.Таким образом, они могут не обращать внимания на изменения в элементах входа в систему, пока сам вход в систему работает должным образом.
Поэтому я думаю, что выбор не между различными способами, с помощью которых ваша страница может выражать функции, связанные с элементами, а сдолжна ли ваша страница вообще выражать элементы или концентрироваться на функциональности, которую она предоставляет, независимо от элементов.
Я рекомендую прочитать ту страницу, которую я цитирую здесь, она дает очень хорошее представление о том, что такое модель страницы.