В качестве результата пришлите ссылку на ваш GitHub-проект в личном кабинете студента на сайте netology.ru.
Все задачи этого занятия нужно делать в одном репозитории. Автотесты первой и второй задач можно реализовать в одном классе или разбить по разным в рамках одного проекта. Ветки репозитория для разделения задач использовать не рекомендуется.
Важно: если у вас что-то не получилось, то оформляйте issue по установленным правилам.
Важно: не делайте ДЗ всех занятий в одном репозитории. Иначе вам потом придётся достаточно сложно подключать системы Continuous integration.
- Инициализируйте на своём компьютере пустой Git-репозиторий.
- Добавьте в него готовый файл .gitignore.
- Добавьте в этот же каталог код ваших автотестов.
- Сделайте необходимые коммиты.
- Добавьте в каталог
artifacts
целевой сервис app-card-delivery.jar. - Создайте публичный репозиторий на GitHub и свяжите свой локальный репозиторий с удалённым.
- Сделайте пуш — удостоверьтесь, что ваш код появился на GitHub.
- Выполните интеграцию проекта с Github Actions (инструкция) или Appveyor (инструкция) на выбор, удостоверьтесь что автотесты в CI выполняются.
- Поставьте бейджик сборки вашего проекта в файл README.md.
- Ссылку на ваш проект отправьте в личном кабинете на сайте netology.ru.
- Задачи, отмеченные как необязательные, можно не сдавать, это не повлияет на получение зачёта.
- Автотесты могут падать и сборка может быть красной из-за багов тестируемого приложения. В таком случае должны быть заведены репорты на обнаруженные в ходе тестирования дефекты в отдельных issues, придерживайтесь схемы при описании.
Настройка CI осуществляется аналогично предыдущему заданию, за исключением того, что файл целевого сервиса теперь называется app-card-delivery.jar
.
Вам необходимо автоматизировать тестирование формы заказа доставки карты:
Требования к содержимому полей:
- Город — один из административных центров субъектов РФ.
- Дата — не ранее трёх дней с текущей даты.
- В поле фамилии и имени разрешены только русские буквы, дефисы и пробелы.
- В поле телефона — только 11 цифр, символ + на первом месте.
- Флажок согласия должен быть выставлен.
Тестируемая функциональность: отправка формы.
Поля «Город» и «Дата» заполняются через прямой ввод значений без использования выбора из выпадающего списка и всплывающего календаря.
Условия: если все поля заполнены корректно, то форма переходит в состояние загрузки:
Важно: состояние загрузки не должно длиться более 15 секунд.
После успешной отправки формы появится всплывающее окно об успешном завершении бронирования:
Вам необходимо самостоятельно изучить элементы на странице, чтобы подобрать правильные селекторы. Обратите внимание, что элементы могут быть как скрыты, так и динамически добавляться или удаляться из DOM.
Подсказка
Смотрите на `data-test-id`, но помните, что он может быть не у всех элементов.
Важно: Дата и время всегда будут уязвимым местом ваших тестов.
Ключевая ловушка в том, что, если вы их захардкодите, то тест, который работал сегодня, уже может не работать завтра, через неделю, месяц, потому что дата может перейти в разряд условного прошлого для приложения и стать невалидной.
Кроме того, дата и время — это одно из немногих мест в тестах, где вам иногда придётся писать логику.
Для решения данной задачи тоже будет необходимо выполнить генерацию даты согласно требований, описанных в условии.
Рекомендуем для генерации строки с датой использовать класс LocalDate, имеющий все необходимые инструменты:
- метод
now()
этого класса вернет вам текущую дату plusDays(long daysToAdd)
умеет добавлять к дате указанное количество днейformat(DateTimeFormatter formatter)
выполнит форматирование даты из типа LocalDate в String используя переданный аргументом DateTimeFormatter
Подсказка
Поле ввода, которое необходимо заполнить в рамках сценария может быть заполнено значением по-умолчанию.
Для заполнения такого поля вам придется его предварительно очистить. При этом метод clear()
работает далеко не на всех формах.
В таком случае вам придётся повторить действия пользователя на странице.
Содержимое поля необходимо выделить и послать нажатие кнопок для удаления текста в поле.
Нажатие клавиш умеет посылать метод sendKeys(CharSequence... keysToSend)
, а необходимые клавиши вы найдете в енаме Keys.
Выделить текст можно двойным кликом или сочетанием клавиш.
Большинство систем старается помогать пользователям ускорить выполнение операций: для этого предоставляются формы с автодополнением и элементы вроде календарей.
Проверьте отправку формы, используя следующие условия:
- Ввод двух букв в поле «Город», после чего выбор нужного города из выпадающего списка:
- Выбор даты на неделю вперёд, начиная от текущей даты, через инструмент календаря:
Важно: предлагаемая вам задача действительно сложная и потребует от вас достаточно много усилий для решения. Именно поэтому мы перенесли её в разряд необязательных.
P.S. Стоит отметить, что перед автоматизацией вы должны попробовать оценить стоимость автоматизации, в неё же входит и сложность. Но оценивать вы не научитесь, не попробовав автоматизировать.