# Програма курсу "Мистецтво Автоматизації Тестування з Selenide + Java"
* Введення в Selenide
* Швидкий Старт. Вихідні умови, залежності, перші кроки та документація
* Selenide в дії
* Завдання 1: Selenide і CSS
* "Жорсткі, але крихкі" чи "слабкі, але стабільні" локатори?
* Локатори, автоматично згенеровані в інспекторі, чи подібрані вручну?
* Коли виносити локатори в окремі змінні та/чи класи?
* Як знайти елемент з списку однотипних елементів по потрібному тексту його внутрішнього елементу (CSS)?
* Структурна інформація в іменах тест-суіту і тестів, яка не несе користі з точки зору тестування
* Встановлення шляху до chromedriver в коді?
* Крихкі жорсткі локатори
* Надмірність в шляхах – прив'язка до тегу
* Надмірність в шляхах – прив'язка до точного шляху
* Прив'язка до повного значення атрибуту class, його початку чи кінця
* Крихкі гнучкі локатори. Прив'язка до часткового значення атрибуту class
* Побудова локатору за допомогою менш читабельних і зрозумілих атрибутів чи їх значень
* Занадто короткі і тому менш інформативні, неочевидні локатори
* Неконсистентні селектори
* Завдання 2: Selenide та XPATH
* Як в XPATH шукати по одному CSS-классу, а не по всьому значенню відповідного атрибуту?
* Як знайти елемент з списку однотипних елементів по потрібному тексту його внутрішнього елементу (XPath)
* Завдання 3: Рефакторинг складних XPath-селекторів
* Де краще зберігати допоміжні методи для побудови складних XPath-селекторів? (Стратегія збереження методів)
* Важливість імен
* Яку саме частину довгого складного XPath селектору варто виносити в окремі методи, а які ні?
* Надмірність імен
* Неясні неповні імена допоміжних методів
* Завдання 4: XPath DSL
* I Початок. Перевірка Концепції
* Шаблон першого тесту
* "Швидкі в реалізації" тести. Читабельність, очевидність и лаконічність
* "Швидкі в виконанні" тести. Рівень складності тестових даних
* Більш швидке введення тексту за допомогою Javascript
* Перевірки (Assertions)
* Повнота перевірок
* "Флоу" End-to-End-тесту. Спрощений тест-план
* Завдання 5: POC-тест
* Вихідні умови та приорітети
* Вивчення функціоналу і основних сценаріїв користувача
* Уточнення приорітетів. Пошук та ігнорування низькоприорітетних операцій
* Визначення сценарію для автоматизації
* Декомпозиція локаторів. Альтернатива нечитабельним XPath
* Оптимізація локаторів по швидкості виконання пошуку
* Типова проблема: локатор вірний але елемент "не той"
* Типова проблема: локатор знаходить невидимого "клона" елемента. Недостатньо жорсткі локатори для однотипних елементів
* Робота з "клонами": фільтр елемента по видимості
* Підбір унікального селектору через звуження пошуку до пошуку всередині батька з унікальними атрибутами
* Відності локатори, менш лаконічні, але більш інформативні, і відповідно очевидніші і читабельніші
* Нагадуємо тест-логіку за допомогою підбору більш інформативних тестових даних
* Неявні перевірки в End-to-End-тестах
* Перевіряємо "все що залишилось" а не тільки "те що змінилось"
* Акцент на функціональних перевірках
* Інформативні локатори
* Типова проблема: елемент не готовий до дій
* Базове структурування тесту
* Коментарі як заголовки
* Самодокументований код
* Іменування тестів
* Рев'ю покриття. Враховуємо "побочні ефекти". Пропущені операції
* II Переогляд. Рефакторинг Тесту - Частина 1
* Принципи DRY и KISS
* DRY і структурування коду за допомогою складних конструкцій мови. KISS проти
* DRY для більш легкого набору коду що повторюється за допомогою змінних/методів
* Змінні чи методи?
* Змінні. Refactoring>Extract>Variable
* Аналіз частин коду що повторюється з точки зору ймовірності змін
* Змінні в тест-методі чи за його межами?
* Скоуп визначення абстракцій
* Refactoring>Extract>Field
* Змінні з локаторами проти змінних с елементами
* Методи?
* Refactor>Extract>Method. Методи с "зашитими даними" (hardcoded data)
* Методи з параметрами
* Методи з вбудованими перевірками?
* Методи + змінні. Винесення "всіх локаторів" у змінні?
* Самодокументований код - Методи замість коментаріїв
* Послаблення KISS за приховування складності в реализації методів
* KISS и тест-кроки: змінні/методи в тестах "заради повної читабельності" проти "заради DRY"
* Завдання 6: Застосуй принцип DRY
* Завдання 7: Застосуй принцип KISS заради читабельності
* Завдання 8: Знайди баланс між KISS і DRY
* Приховування технічних деталей. Контекст
* Завдання 9: Сховай налаштування базового URL
* День Незалежності Тестів
* Більше тестів
* Незалежні тести через спрощення тестової логіки
* Незалежні тести за допомогою контролю їх оточення через керування даними в базі
* Надання переваги явним передумовам слідуючи KISS замість їх приховування заради DRY
* Завдання 10: Допиши тест на фільтрування задач і зроби тести незалежними слідуючи принципу DRY
* Завдання 11: Спрости реалізацію незалежності тестів слідуючи принципу KISS використовуючи явні передумови
* III Загартування. Розширення покриття. Атомарні тести
* Завдання 12: Розширь покриття дій на фільтрі "All"
* IV Структура і перевикористання. Рефакторинг Тестів - Частина 2
* Запах коду: Великий Клас
* Ретроспектива на базові принципи на початку побудови автоматизації
* Рефакторинг: Витяг класу
* Cтруктура
* Заміна наслідування композицією
* Імена в контексті
* Знову про DRY і перевикористання коду
* Шаблон PageObject
* Завдання 13: Розширь покриття дій на фильтрі "Active" і "Completed"
* Віджети (Застосовуємо PageObject до компонентів на сторінці)
* Завдання 14: Виділи віджет, що представляє текстову мітку, що редагується подвійним кліком
* Загальні часті питання і відповіді
* Тестова логіка
* Рекомендації та загальноприйняті домовленності по підбору імен
* Рекоммендації до покращення читабельності імен
* Шаблон побудови імені методу
* Шаблон побудови імені змінної
* Використання загальноприйнятої термінології
* Не зловживати скороченнями
* Термінологія в контексті
* Говоримо на мові місцевих
* Недвозначність
* Лаконічність
* Не повторяти те, що вже задано контекстом
* Простота