Skip to content

levvolkov/Selenide

Repository files navigation

Build status

4. Домашнее задание к занятию «2.2. Selenide»

В качестве результата пришлите ссылку на ваш GitHub-проект в личном кабинете студента на сайте netology.ru.

Все задачи этого занятия нужно делать в одном репозитории. Автотесты первой и второй задач можно реализовать в одном классе или разбить по разным в рамках одного проекта. Ветки репозитория для разделения задач использовать не рекомендуется.

Важно: если у вас что-то не получилось, то оформляйте issue по установленным правилам.

Важно: не делайте ДЗ всех занятий в одном репозитории. Иначе вам потом придётся достаточно сложно подключать системы Continuous integration.

Как сдавать задачи

  1. Инициализируйте на своём компьютере пустой Git-репозиторий.
  2. Добавьте в него готовый файл .gitignore.
  3. Добавьте в этот же каталог код ваших автотестов.
  4. Сделайте необходимые коммиты.
  5. Добавьте в каталог artifacts целевой сервис app-card-delivery.jar.
  6. Создайте публичный репозиторий на GitHub и свяжите свой локальный репозиторий с удалённым.
  7. Сделайте пуш — удостоверьтесь, что ваш код появился на GitHub.
  8. Выполните интеграцию проекта с Github Actions (инструкция) или Appveyor (инструкция) на выбор, удостоверьтесь что автотесты в CI выполняются.
  9. Поставьте бейджик сборки вашего проекта в файл README.md.
  10. Ссылку на ваш проект отправьте в личном кабинете на сайте netology.ru.
  11. Задачи, отмеченные как необязательные, можно не сдавать, это не повлияет на получение зачёта.
  12. Автотесты могут падать и сборка может быть красной из-за багов тестируемого приложения. В таком случае должны быть заведены репорты на обнаруженные в ходе тестирования дефекты в отдельных issues, придерживайтесь схемы при описании.

Настройка CI

Настройка CI осуществляется аналогично предыдущему заданию, за исключением того, что файл целевого сервиса теперь называется app-card-delivery.jar.

Задача №1: заказ доставки карты

Вам необходимо автоматизировать тестирование формы заказа доставки карты:

Требования к содержимому полей:

  1. Город — один из административных центров субъектов РФ.
  2. Дата — не ранее трёх дней с текущей даты.
  3. В поле фамилии и имени разрешены только русские буквы, дефисы и пробелы.
  4. В поле телефона — только 11 цифр, символ + на первом месте.
  5. Флажок согласия должен быть выставлен.

Тестируемая функциональность: отправка формы.

Поля «Город» и «Дата» заполняются через прямой ввод значений без использования выбора из выпадающего списка и всплывающего календаря.

Условия: если все поля заполнены корректно, то форма переходит в состояние загрузки:

Важно: состояние загрузки не должно длиться более 15 секунд.

После успешной отправки формы появится всплывающее окно об успешном завершении бронирования:

Вам необходимо самостоятельно изучить элементы на странице, чтобы подобрать правильные селекторы. Обратите внимание, что элементы могут быть как скрыты, так и динамически добавляться или удаляться из DOM.

Подсказка
Смотрите на `data-test-id`, но помните, что он может быть не у всех элементов.

Важно: Дата и время всегда будут уязвимым местом ваших тестов.

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

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

Рекомендуем для генерации строки с датой использовать класс LocalDate, имеющий все необходимые инструменты:

  • метод now() этого класса вернет вам текущую дату
  • plusDays(long daysToAdd) умеет добавлять к дате указанное количество дней
  • format(DateTimeFormatter formatter) выполнит форматирование даты из типа LocalDate в String используя переданный аргументом DateTimeFormatter
Подсказка

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

Для заполнения такого поля вам придется его предварительно очистить. При этом метод clear() работает далеко не на всех формах.
В таком случае вам придётся повторить действия пользователя на странице.

Содержимое поля необходимо выделить и послать нажатие кнопок для удаления текста в поле.
Нажатие клавиш умеет посылать метод sendKeys(CharSequence... keysToSend), а необходимые клавиши вы найдете в енаме Keys.
Выделить текст можно двойным кликом или сочетанием клавиш.

Задача №2: взаимодействие с комплексными элементами (необязательная)

Большинство систем старается помогать пользователям ускорить выполнение операций: для этого предоставляются формы с автодополнением и элементы вроде календарей.

Проверьте отправку формы, используя следующие условия:

  1. Ввод двух букв в поле «Город», после чего выбор нужного города из выпадающего списка:

  1. Выбор даты на неделю вперёд, начиная от текущей даты, через инструмент календаря:

Важно: предлагаемая вам задача действительно сложная и потребует от вас достаточно много усилий для решения. Именно поэтому мы перенесли её в разряд необязательных.

P.S. Стоит отметить, что перед автоматизацией вы должны попробовать оценить стоимость автоматизации, в неё же входит и сложность. Но оценивать вы не научитесь, не попробовав автоматизировать.