- Объектно-ориентированная парадигма для построения модели для тестов
Провести рефакторинг своего теста на регистрацию студента по форме https://demoqa.com/automation-practice-form, используя инструменты объектно-ориентированной парадигмы для инкапсуляции деталей реализации бизнес-шагов пользователя, таким образом реализовав идеи шаблона PageObject.
- В этой части мы рассматриваем как ценный c точки зрения бизнеса шаг пользователя – «заполнение отдельных данных о пользователе» или «подтверждение результата проделанной работы» (как например, подтверждение что регистрация прошла успешно):
- Все элементы выносить в отдельные поля объекта класса не обязательно, но стоит это сделать с теми элементами, которые будут повторяться.
- Класс для PageObject должен лежать в выделенном модуле в выделенном пакете внутри проекта.
- В этой части мы рассматриваем как ценный c точки зрения бизнеса шаг пользователя – «отправить форму с данными» или другими словами «провести регистрацию через форму». Также шагом считаем подтверждение результата проделанной работы (как например, подтверждение, что регистрация прошла успешно).
Также в этой части следует провести рефакторинг работы с данными пользователя, представив их в виде объекта датакласса:
- Не обязательно на уровне с высокоуровневыми шагами типа .register(user) добавлять в PageObject средне-уровневые шаги типа .fill_email(user.email), но можно, если их добавлять - то возможно их стоит сделать "приватными" (добавив перед именем подчеркивание), чтобы не дать возможность в тесте – миксовать подход, а использовать только высокоуровневые шаги.
- Вероятно, проще вместо добавления таких средне-уровневых шагов – добавить в init поля объекта для всех элементов и переиспользовать их внутри реализации .register(user). Таким образом реализация будет более лаконичная и все еще достаточно гибкая, чтобы в будущем иметь доступ к элементам в контексте других "бизнес задач" на этой странице.
- Классы для PageObject и модели данных должны лежать в выделенных модулях в выделенных пакетах внутри проекта.
- При реализации модели данных для реализации тех или иных полей будет неплохо использовать специальные типы данных, например, для даты использовать datetime.date, а для хобби использовать Enum.
- Добавить в проект тест на упрощенную регистрацию через форму https://demoqa.com/text-box и соответствующий PageObject:
- Реализовать шаблон ApplicationManager для предсоздания всех объектов для пейдж-обджектов.
- В тесте загрузить форму не через simple_registration_form.open(), а через app.left_panel.open_simple_registration_form(), который должен быть шорткатом (методом, вызывающим под капотом другой метод этого же объекта) на app.left_panel.open('Elements', 'Text Box').
- Соответственно добавить пейджобджект для LeftPanel и создать его объект в виде поля обьекта апликейшен-менеджера.
- Тесты сгруппированы по классу, который они тестируют.
- Каждый тест называется именем соответствующего ему метода.
Первый тест на регистрацию студента лежит в основной ветке.
- Первое задание лежит в бренче mid-level-step-objects
- Решение второго задания ледит в бренче high-level-step-objects
- Третье задание лежит в бренче application-manager (without left_panel)