Перейти к содержимому

Фотография

Page Object + динамические элементы

page object

  • Авторизуйтесь для ответа в теме
Сообщений в теме: 2

#1 tdurova

tdurova

    Новый участник

  • Members
  • Pip
  • 36 сообщений
  • ФИО:Татьяна Дурова


Отправлено 28 сентября 2015 - 22:31

Cтрою страницы из блоков, обычным объявлением агрегируемых страниц в виде полей. Переходы межу страницами идут иногда через обобщенные страницы (делегированием), иногда напрямую; методы страниц возвращают либо себя, либо другую страницу (Flow). Но как быть с незначительными отличиями некоторых страниц/блоков (и в тоже время полной идентичностью некоторых других страниц) для авторизованных и неавторизованных пользователях?

 

Пыталась применить паттерн Стратегия, но так и не поняла куда девать класс контекст и как его использовать, ну и в самих алгоритмах для авторизованного и неавторизованного юзера мне не понятно что написать. Сейчас у меня обычные if/else и метод IsLogged() (+ методы GoToLogin(AccountData accountData), GoToLogout), а также по-сути некоторые блоки имеют замену для авторизованных пользователей (например есть HeaderForLoggedUser с кнопками "Logout", "Cart", "My Profile" и его аналог HeaderForUnLoggedUser, у которого есть только кнопка "Sign in" ). + мне надо как то написать тест на проверку разной цены на странице выдачи товаров и на странице товара для пользователей разных категорий и совсем неавторизованных.

 

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

 

Как это все лучше реализовать? Пыталась переделать пример с наследованием от AuthTestBase или просто TestBase, не помогло, потом начала смотреть в сторону двух разных предков AuthPageBase и PageBase, но как тоже тупик. Вариант с множеством классов для страниц кажется все равно проще..

 

+ Не могу понять, надо ли делать какое то статичное поле с данными аккаунта пользователя, под которым я зашла, и нужно ли периодически проверять, что я залогинена именно под данным "Васей", а не просто под кем-нибудь? Как это реализуется, если я все-таки решу делать нечто подобное? Каждой странице-блоку добавить свойство с данными аккаунта + метод, проверяющий под каким пользователем я авторизованна и делающим перелогин под нужным мне, если залогинена не под тем?


  • 0

#2 user12

user12

    Специалист

  • Members
  • PipPipPipPipPip
  • 894 сообщений
  • ФИО:Виктор
  • Город:Минск


Отправлено 29 сентября 2015 - 12:04

Но как быть с незначительными отличиями некоторых страниц/блоков (и в тоже время полной идентичностью некоторых других страниц) для авторизованных и неавторизованных пользователях?

 

 

Сделайте enum с двумя значениями(авторизованны или не авторизованны)

Просто создавайте страницы как обычно, только в методы передавайте enum

Далее в тестах передавать enum в методы ваших созданных страниц

В методах, когда переключаетесь switch и проверяете - вот я авторизован, значит должна быть какая-то кнопка. Другой тест - я не авторизован, значит, кнопка не отображается


  • 0

#3 vkazar

vkazar

    Активный участник

  • Members
  • PipPip
  • 128 сообщений
  • ФИО:Виктор
  • Город:Москва

Отправлено 29 сентября 2015 - 12:21

В методах, когда переключаетесь switch и проверяете - вот я авторизован, значит должна быть какая-то кнопка. Другой тест - я не авторизован, значит, кнопка не отображается

Пишу на C#+Webdriver, пришлось исключить из полей страницы элементы, которые там могут не оказаться. Например, у меня есть таблица с некими значениями. Так вот если значений нет, то и таблицы самой в DOM также нет. Приходится в [FindBy()] указывать div, в котором эта таблица МОЖЕТ быть, а дальше работать с FindElement()

Для ТС могу предложить создать абстрактный (чтобы не путаться) класс с общими элементами для авторизованных и неавторизованных страниц - а дальше его наследовать для каждого типа.
Ну а тесты обращаются к прослойке, которая уже точно знает, должна быть страница авторизована или нет.
  • 0

Тестировщик должен быть умнее программиста... ну, по крайней мере, хитрее. ©




Количество пользователей, читающих эту тему: 0

0 пользователей, 0 гостей, 0 анонимных