{"id":19411641,"url":"https://github.com/levvolkov/testingweb","last_synced_at":"2026-04-09T20:36:55.017Z","repository":{"id":228619134,"uuid":"774516759","full_name":"levvolkov/TestingWeb","owner":"levvolkov","description":"3 «Тестирование веб-интерфейсов с использованием Selenium»  ","archived":false,"fork":false,"pushed_at":"2024-03-23T13:17:32.000Z","size":9166,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-01-07T15:21:49.451Z","etag":null,"topics":["appveyor","automated-testing","github-actions","gradle","selenium","testing-web"],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/levvolkov.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null}},"created_at":"2024-03-19T17:26:06.000Z","updated_at":"2024-08-02T20:30:46.000Z","dependencies_parsed_at":"2024-03-23T14:28:17.539Z","dependency_job_id":null,"html_url":"https://github.com/levvolkov/TestingWeb","commit_stats":null,"previous_names":["levvolkov/testingweb"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/levvolkov%2FTestingWeb","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/levvolkov%2FTestingWeb/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/levvolkov%2FTestingWeb/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/levvolkov%2FTestingWeb/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/levvolkov","download_url":"https://codeload.github.com/levvolkov/TestingWeb/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":240589046,"owners_count":19825289,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["appveyor","automated-testing","github-actions","gradle","selenium","testing-web"],"created_at":"2024-11-10T12:22:26.768Z","updated_at":"2026-04-09T20:36:49.989Z","avatar_url":"https://github.com/levvolkov.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"[![Java CI with Gradle](https://github.com/LevVolkov/TestingWeb/actions/workflows/gradle.yml/badge.svg)](https://github.com/LevVolkov/TestingWeb/actions/workflows/gradle.yml)\n[![Build status](https://ci.appveyor.com/api/projects/status/6vixklr4y47knu2b?svg=true)](https://ci.appveyor.com/project/LevVolkov/testingweb)\n\n# 3. Домашнее задание к занятию «2.1. Тестирование веб-интерфейсов»\n\nВ качестве результата пришлите ссылку на ваш GitHub-проект в личном кабинете студента на сайте [netology.ru](https://netology.ru).\n\nВсе задачи этого занятия нужно делать в одном репозитории.\n\n[Примеры кода к занятию](https://github.com/netology-code/aqa-code/tree/master/web).\n\n**Важно**: если у вас что-то не получилось, то оформляйте issue [по установленным правилам](https://github.com/netology-code/aqa-homeworks/blob/master/report-requirements.md).\n\n**Важно**: не делайте ДЗ всех занятий в одном репозитории. Иначе вам потом придётся достаточно сложно подключать системы Continuous integration.\n\n## Как сдавать задачи\n\n1. Инициализируйте на своём компьютере пустой Git-репозиторий.\n1. Добавьте в него готовый файл [.gitignore](https://github.com/netology-code/aqa-homeworks/blob/master/.gitignore).\n1. Добавьте в этот же каталог код ваших автотестов.\n1. Сделайте необходимые коммиты.\n1. Добавьте в каталог `artifacts` целевой сервис [app-order.jar](https://github.com/netology-code/aqa-homeworks/blob/master/web/app-order.jar).\n1. Создайте публичный репозиторий на GitHub и свяжите свой локальный репозиторий с удалённым.\n1. Сделайте пуш — удостоверьтесь, что ваш код появился на GitHub.\n1. Выполните интеграцию проекта с 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 выполняются.             \n1. Поставьте бейджик сборки вашего проекта в файл README.md.\n1. Ссылку на ваш проект отправьте в личном кабинете на сайте [netology.ru](https://netology.ru).\n1. Задачи, отмеченные как необязательные, можно не сдавать, это не повлияет на получение зачёта.     \n1. Автотесты могут падать и сборка может быть красной из-за багов тестируемого приложения. В таком случае должны быть заведены репорты на обнаруженные в ходе тестирования дефекты в отдельных issues, [придерживайтесь схемы при описании](https://github.com/netology-code/aqa-homeworks/blob/master/report-requirements.md).\n\n## Селекторы\n\nПеред выполнением ДЗ рекомендуем вам ознакомиться с [кратким руководством по работе с селекторами](https://github.com/netology-code/aqa-homeworks/blob/master/web/selectors.md).\n\n## Настройка\n\n### 1. Целевой сервис\n\nВаш целевой сервис (SUT — System under test) расположен в файле `app-order.jar` в этом репозитории. Вам нужно его скачать и положить в каталог `artifacts` вашего проекта.\n\nПоскольку файлы с расширением `.jar` находят в списках `.gitignore`, вам нужно принудительно заставить Git следить за ним: `git add -f artifacts/app-order.jar`.\n\nПосле чего сделать `git push`. Обязательно удостоверьтесь, что файл попал в репозиторий.\n\n### 2. `build.gradle`\n\nФайл `build.gradle` в проектах на базе Selenium и [Selenide](https://ru.selenide.org/documentation.html) должен выглядеть следующим образом:\n\n```groovy\nplugins {\n    id 'java'\n}\n\ngroup 'ru.netology'\nversion '1.0-SNAPSHOT'\n\nsourceCompatibility = 11\n\n// кодировка файлов (если используете русский язык в файлах)\ncompileJava.options.encoding = \"UTF-8\"\ncompileTestJava.options.encoding = \"UTF-8\"\n\nrepositories {\n    mavenCentral()\n}\n\ndependencies {\n    testImplementation 'org.junit.jupiter:junit-jupiter:5.6.1'\n    // библиотека com.codeborne:selenide используется при построении проекта с использованием Selenide\n    // testImplementation 'com.codeborne:selenide:6.17.2'\n    \n    // при реализации проекте с использованием Selenium вместо библиотеки com.codeborne:selenide подключаются\n    // org.seleniumhq.selenium:selenium-java и io.github.bonigarcia:webdrivermanager\n     testImplementation 'org.seleniumhq.selenium:selenium-java:4.18.1'\n     testImplementation 'io.github.bonigarcia:webdrivermanager:5.7.0'\n}\n\ntest {\n    useJUnitPlatform()\n    // в тестах, вызывая `gradlew test -Dselenide.headless=true` будем передавать этот параметр в JVM (где его подтянет Selenide)\n    // свойство selenide.headless используется в проектах на основе Selenide для передачи значения параметра в JVM\n    systemProperty 'selenide.headless', System.getProperty('selenide.headless')\n    // свойство chromeoptions.prefs используется для задания настроек браузера в проектах на основе Selenide, выключаем менеджер паролей \n    systemProperty 'chromeoptions.prefs', System.getProperty('chromeoptions.prefs', \"profile.password_manager_leak_detection=false\")\n}\n```\n\n#### **Headless-режим браузера**\n\nНа серверах сборки чаще всего нет графического интерфейса, поэтому, запуская браузер в режиме **headless**, мы отключаем графический интерфейс. При этом все процессы браузера продолжают работать так же.\nПри использовании **Selenium** этот режим настраивается непосредственно в коде во время инициализации драйвера, примеры инициализации ниже.\n\nДетальнее можете почитать про headless:\n- [Chrome](https://www.chromestatus.com/features/5678767817097216),\n- [Gecko (Firefox)](https://hacks.mozilla.org/2017/12/using-headless-mode-in-firefox/).\n\nВключение **headless**-режима при использовании **Selenium** необходимо реализовать в коде во время создания экземпляра WebDriver:\n\n```java\nChromeOptions options = new ChromeOptions();\noptions.addArguments(\"--disable-dev-shm-usage\");\noptions.addArguments(\"--no-sandbox\");\noptions.addArguments(\"--headless\");\ndriver = new ChromeDriver(options);\n```\n\nДля **Selenide** **headless**-режим активируется при запуске тестов с определённым параметром:\n```\ngradlew test -Dselenide.headless=true\n```\n\n#### **WebDriver для разных операционных систем**\n\nЕсли вы выполняете работу с использованием **Selenium**, то будьте готовы, что ваша сборка может упасть из-за того, что у вас в репозитории WebDriver для одной ОС, например, для Windows, а в CI используется Linux. Для решения этой проблемы можно использовать библиотеку [Webdriver Manager](https://github.com/bonigarcia/webdrivermanager). Она автоматически определяет ОС и версию браузера, скачивает и устанавливает подходящий файл драйвера. Кстати, в Selenide используется именно эта библиотека.\nДля автоматической настройки хромдрайвера с помощью **Webdriver Manager** в проектах на основе **Selenium** добавьте в тестовый класс метод\n```java\n@BeforeAll\npublic static void setupAll() {\n    WebDriverManager.chromedriver().setup();\n}\n```\nПри использовани **Webdriver Manager** отпадает необходимость в хранении файлов вебдрайвера в репозитории проекта и задании значения свойства **webdriver.chrome.driver** вручную.\n\n### 3. `.appveyor.yml`\n\nAppVeyor настраивается аналогично предыдущей лекции, за исключением того, что тесты нужно запускать так, чтобы **Selenide** запускался в headless-режиме.    \nСекция `build_script` для включения headless режима в проекте, построенном с использованием **Selenide**, будет выглядеть так\n```yaml\nbuild_script:\n  - ./gradlew test --info -Dselenide.headless=true\n```\nЕсли тесты написаны с использованием **Selenium**, то после включения headless-режима в коде никаких дополнительных флагов в командной строке передавать не нужно.\n\n## Задача №1: заказ карты\n\nВам необходимо автоматизировать тестирование формы заказа карты:\n\n![](https://github.com/netology-code/aqa-homeworks/blob/master/web/pic/order.png)\n\nТребования к содержимому полей:\n1. В поле фамилии и имени разрешены только русские буквы, дефисы и пробелы.\n2. В поле телефона — только 11 цифр, символ + на первом месте.\n3. Флажок согласия должен быть выставлен.\n\nТестируемая функциональность: отправка формы.\n\nУсловия: если все поля заполнены корректно, то вы получаете сообщение об успешно отправленной заявке:\n\n![](https://github.com/netology-code/aqa-homeworks/blob/master/web/pic/success.jpg)\n\nВам необходимо самостоятельно изучить элементы на странице, чтобы подобрать правильные селекторы.\n\n\u003cdetails\u003e\n    \u003csummary\u003eПодсказка\u003c/summary\u003e\n\n    Смотрите на `data-test-id` и внутри него ищите нужный вам `input` — используйте вложенность для селекторов.\n\u003c/details\u003e\n\nПроект с автотестами должен быть выполнен на базе Gradle с использованием Selenide или Selenium по выбору студента.\n\nДля запуска тестируемого приложения скачайте JAR-файл из текущего каталога и запускайте его командой:\n`java -jar app-order.jar`.\n\nПриложение будет запущено на порту 9999.\n\nЕсли по каким-то причинам порт 9999 на вашей машине используется другим приложением, используйте:\n\n`java -jar app-order.jar -port=7777`\n\nУбедиться, что приложение работает, вы можете, открыв в браузере страницу: http://localhost:9999.\n\n## Задача №2: проверка валидации (необязательная)\n\nПосле того как вы протестировали happy path, необходимо протестировать остальные варианты.\n\nТестируемая функциональность: валидация полей перед отправкой.\n\nУсловия: если какое-то поле не заполнено или заполнено неверно, то при нажатии на кнопку «Продолжить» должны появляться сообщения об ошибке. Будет подсвечено только первое неправильно заполненное поле:\n\n![](https://github.com/netology-code/aqa-homeworks/blob/master/web/pic/error.png)\n\n\u003cdetails\u003e\n    \u003csummary\u003eПодсказка\u003c/summary\u003e\n\n    У некоторых элементов на странице появится css-класс `input_invalid`.\n\u003c/details\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flevvolkov%2Ftestingweb","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Flevvolkov%2Ftestingweb","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flevvolkov%2Ftestingweb/lists"}