An open API service indexing awesome lists of open source software.

https://github.com/levvolkov/selenide

4 «Selenide»
https://github.com/levvolkov/selenide

appveyor automated-testing ci gradle selenide

Last synced: 3 months ago
JSON representation

4 «Selenide»

Awesome Lists containing this project

README

          

[![Build status](https://ci.appveyor.com/api/projects/status/pmoq6980yr6xye67?svg=true)](https://ci.appveyor.com/project/LevVolkov/selenide)

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

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

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

**Важно**: если у вас что-то не получилось, то оформляйте issue [по установленным правилам](https://github.com/netology-code/aqa-homeworks/blob/master/report-requirements.md).

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

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

1. Инициализируйте на своём компьютере пустой Git-репозиторий.
1. Добавьте в него готовый файл [.gitignore](https://github.com/netology-code/aqa-homeworks/blob/master/.gitignore).
1. Добавьте в этот же каталог код ваших автотестов.
1. Сделайте необходимые коммиты.
1. Добавьте в каталог `artifacts` целевой сервис [app-card-delivery.jar](https://github.com/netology-code/aqa-homeworks/blob/master/selenide/app-card-delivery.jar).
1. Создайте публичный репозиторий на GitHub и свяжите свой локальный репозиторий с удалённым.
1. Сделайте пуш — удостоверьтесь, что ваш код появился на GitHub.
1. Выполните интеграцию проекта с Github Actions ([инструкция](https://github.com/netology-code/aqa-homeworks/tree/master/github-actions-integration)) или Appveyor ([инструкция](https://github.com/netology-code/aqa-homeworks/tree/master/api-ci#appveyor)) на выбор, удостоверьтесь что автотесты в CI выполняются.
1. Поставьте бейджик сборки вашего проекта в файл README.md.
1. Ссылку на ваш проект отправьте в личном кабинете на сайте [netology.ru](https://netology.ru).
1. Задачи, отмеченные как необязательные, можно не сдавать, это не повлияет на получение зачёта.
1. Автотесты могут падать и сборка может быть красной из-за багов тестируемого приложения. В таком случае должны быть заведены репорты на обнаруженные в ходе тестирования дефекты в отдельных issues, [придерживайтесь схемы при описании](https://github.com/netology-code/aqa-homeworks/blob/master/report-requirements.md).

## Настройка CI

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

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

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

![](https://github.com/netology-code/aqa-homeworks/blob/master/selenide/pic/order.png)

Требования к содержимому полей:
1. Город — [один из административных центров субъектов РФ](https://ru.wikipedia.org/wiki/%D0%90%D0%B4%D0%BC%D0%B8%D0%BD%D0%B8%D1%81%D1%82%D1%80%D0%B0%D1%82%D0%B8%D0%B2%D0%BD%D1%8B%D0%B5_%D1%86%D0%B5%D0%BD%D1%82%D1%80%D1%8B_%D1%81%D1%83%D0%B1%D1%8A%D0%B5%D0%BA%D1%82%D0%BE%D0%B2_%D0%A0%D0%BE%D1%81%D1%81%D0%B8%D0%B9%D1%81%D0%BA%D0%BE%D0%B9_%D0%A4%D0%B5%D0%B4%D0%B5%D1%80%D0%B0%D1%86%D0%B8%D0%B8).
1. Дата — не ранее трёх дней с текущей даты.
1. В поле фамилии и имени разрешены только русские буквы, дефисы и пробелы.
1. В поле телефона — только 11 цифр, символ + на первом месте.
1. Флажок согласия должен быть выставлен.

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

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

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

![](https://github.com/netology-code/aqa-homeworks/blob/master/selenide/pic/loading.png)

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

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

![](https://github.com/netology-code/aqa-homeworks/blob/master/selenide/pic/popup.png)

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

Подсказка

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

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

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

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

Рекомендуем для генерации строки с датой использовать класс [LocalDate](https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/time/LocalDate.html), имеющий все необходимые инструменты:
- метод `now()` этого класса вернет вам текущую дату
- `plusDays(long daysToAdd)` умеет добавлять к дате указанное количество дней
- `format(DateTimeFormatter formatter)` выполнит форматирование даты из типа LocalDate в String используя переданный аргументом [DateTimeFormatter](https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/time/format/DateTimeFormatter.html)

Подсказка

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

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

Содержимое поля необходимо выделить и послать нажатие кнопок для удаления текста в поле.
Нажатие клавиш умеет посылать метод `sendKeys(CharSequence... keysToSend)`, а необходимые клавиши вы найдете в енаме [Keys](https://www.selenium.dev/selenium/docs/api/java/org/openqa/selenium/Keys.html).
Выделить текст можно двойным кликом или сочетанием клавиш.

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

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

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

![](https://github.com/netology-code/aqa-homeworks/blob/master/selenide/pic/dropdown.png)

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

![](https://github.com/netology-code/aqa-homeworks/blob/master/selenide/pic/calendar.png)

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

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