Code Monkey home page Code Monkey logo

demoqa-registrations-tests's Introduction

📁 Урок "PageObjects"

  1. Объектно-ориентированная парадигма для построения модели для тестов

Задание

Провести рефакторинг своего теста на регистрацию студента по форме https://demoqa.com/automation-practice-form, используя инструменты объектно-ориентированной парадигмы для инкапсуляции деталей реализации бизнес-шагов пользователя, таким образом реализовав идеи шаблона PageObject.

  1. В этой части мы рассматриваем как ценный c точки зрения бизнеса шаг пользователя – «заполнение отдельных данных о пользователе» или «подтверждение результата проделанной работы» (как например, подтверждение что регистрация прошла успешно):
    • Все элементы выносить в отдельные поля объекта класса не обязательно, но стоит это сделать с теми элементами, которые будут повторяться.
    • Класс для PageObject должен лежать в выделенном модуле в выделенном пакете внутри проекта.
  2. В этой части мы рассматриваем как ценный c точки зрения бизнеса шаг пользователя – «отправить форму с данными» или другими словами «провести регистрацию через форму». Также шагом считаем подтверждение результата проделанной работы (как например, подтверждение, что регистрация прошла успешно). Также в этой части следует провести рефакторинг работы с данными пользователя, представив их в виде объекта датакласса:
    • Не обязательно на уровне с высокоуровневыми шагами типа .register(user) добавлять в PageObject средне-уровневые шаги типа .fill_email(user.email), но можно, если их добавлять - то возможно их стоит сделать "приватными" (добавив перед именем подчеркивание), чтобы не дать возможность в тесте – миксовать подход, а использовать только высокоуровневые шаги.
    • Вероятно, проще вместо добавления таких средне-уровневых шагов – добавить в init поля объекта для всех элементов и переиспользовать их внутри реализации .register(user). Таким образом реализация будет более лаконичная и все еще достаточно гибкая, чтобы в будущем иметь доступ к элементам в контексте других "бизнес задач" на этой странице.
    • Классы для PageObject и модели данных должны лежать в выделенных модулях в выделенных пакетах внутри проекта.
    • При реализации модели данных для реализации тех или иных полей будет неплохо использовать специальные типы данных, например, для даты использовать datetime.date, а для хобби использовать Enum.
  3. Добавить в проект тест на упрощенную регистрацию через форму 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 и создать его объект в виде поля обьекта апликейшен-менеджера.
    • Тесты сгруппированы по классу, который они тестируют.
    • Каждый тест называется именем соответствующего ему метода.

Решение

Первый тест на регистрацию студента лежит в основной ветке.

  1. Первое задание лежит в бренче mid-level-step-objects
  2. Решение второго задания ледит в бренче high-level-step-objects
  3. Третье задание лежит в бренче application-manager (without left_panel)

Дополнительные материалы

  1. О синтаксисе классов в Python: «Инструментарий для работы с классами в Python»
  2. Мартин Фаулер о PageObject
  3. Рекомендации и общепринятые договоренности в подборе имен (Python)
  4. Примеры тестов разного стиля с и без применения PageObject
  5. Примеры более сложных PageObject-ов для контролов
  6. И тестов с ними

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.