# Программа курса "Искусство Автоматизации Тестирования с Selene + Python"
* Введение в Selene
* Быстрый Старт. Исходные условия, зависимости, первые шаги и документация
* Selene в действии
* Задание 1: Selene и CSS
* "Строгие, но хрупкие" или "слабые, но стабильные" локаторы?
* Локаторы, автоматически сгенерированные в инспекторе, или подобранные вручную?
* Когда выносить локаторы в отдельные переменные и/или классы?
* Как найти элемент из списка однотипных элементов по нужному тексту его внутреннего элемента (CSS)?
* Структурная информация в именах тест-сьюта и тестов, которая не несет пользы с точки зрения тестирования
* Установка пути к chromedriver в коде?
* Хрупкие строгие локаторы
* Избыточность в путях - привязка к тегу
* Избыточность в путях - привязка к точному пути
* Привязка к полному значению аттрибута class либо его начала или конца
* Хрупкие гибкие локаторы. Привязка к частичному значению атрибута class
* Построение локатора с помощью менее читабельных и понятных аттрибутов либо их значений
* Слишком краткие и потому менее информативные, неочевидные локаторы
* Неконсистентные селекторы
* Задание 2: Selene и 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>Function. Функции с "зашитыми данными" (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: Выдели виджет представляющий текстовую метку редактируемую по двойному клику
* Общие частые вопросы и ответы
* Тестовая логика
* Рекомендации и общепринятые договоренности в подборе имен
* Рекоммендации к улучшению читабельности имен
* Шаблон построения имени функции или метода
* Шаблон построения имени переменной
* Использование общепринятой терминологии
* Не злоупотреблять сокращениями
* Терминология в контексте
* Говорим на языке местных
* Недвусмысленность
* Лаконичность
* Не повторять то, что уже задано контекстом
* Простота