Автоматизация с нуля (Java + Selenide + Widgets aka PageObjects) [Бесплатный видео-курс]

Когда то, в 2016 том году, проводил я вебинар на тему “построения автоматизациии с нуля используя стиль виджетов”.

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

Так вот… Ту запись я в свое время разбил на гранулированные видео-уроки, и получился такой себе видео-курс. Который я когда то и продавал. А сейчас вот вспомнил о нем, и выложил в паблучный доступ. С 2016-того много воды утекло, и селениде уже обновился, и я может где то опыта прибавил, поэтому может не все уже актуально на 100%… Но в целом думаю, должно быть многим полезно. Особенно новичкам. Можно также расматривать этот курс как видео-превью моей книги “Искусство Aвтоматизации с Selenide”

Плейлист курса на YouTube

Полный список видео-уроков

I - Начало

I-01 Анализируем приложение. Определяем основные юзер-сценарии
I-02 Новый проект. Зависимости. Шаблон теста
I-03 Взгляд в будущее: Куда идем и почему шаблон Widgets и ООП
I-04 Первый шаг в тесте и первые настройки
I-05 Наследование - Зло:)
I-06 Используем первый виджет. Предпочтение языку пользователя
I-07 Реализация простого виджета. Яйца в своих корзинах
I-08 Нисходящий дизайн как Холмс учил
I-09 Структура тестового проекта

II - Строим

II-01 Лаконичность для читабельности. Имена в контексте
II-02 Универсальные виджеты
II-03 Универсальные виджеты. Контейнер виджета
II-04 Q&A: Где искать методы Selenide?
II-05 Универсальные виджеты. Внутренний поиск в Selenide и XPath
II-06 Универсальные виджеты. Шаблон Fluent PageObject/Widget
II-07 Универсальные виджеты. Больше о универсальных локаторах
II-08 Универсальные виджеты. Больше о контексте поиска
II-09 Q&A: Явно лучше чем неявно, применяя к this
II-10 Преждевременная оптимизация как зло или предохранение
II-11 DRY против KISS
II-12 Генерация уникальных тестовых данных
II-13 Универсальные виджеты. Самодокументируемый код
II-14 Инкапсуляция в ООП
II-15 Резюме использования конструкторов
II-16 Фильтр коллекции в Selenide. Читабельная альтернатива XPath
II-17 Больше о ограниченни API виджета для новичков
II-18 Единая точка входа в тестовую модель
II-19 Явные против неявных проверок в End-to-end-сценариях
II-20 Fluent Widgets против единой точки входа
II-21 Взгляд в будущее: Больше примеров переиспользования виджетов
II-22 Взгляд в будущее: Виджеты с разным изначальным состоянием
II-23 Взгляд в будущее: Укращаем невидимых клонов элементов
II-24 Взгляд в будущее: Еще о крутости виджетов и поиске по тексту
II-25 Взгляд в будущее: Дополнительные шаги для тестовых данных
II-26 Widgets против PageObjects
II-27 Пример сложного виджета
II-28 Краткое резюме и трюки в BDD стиле для репортов Allure
II-29 Пример виджета с состоянием помнящим свой URL

III - Рост

III-01 Больше атомарных тестов с предусловиями для лучшего покрытия
III-02 Настройка выполнения тестов. Категории. Профили. Свойства

FAQ

Детальней о курсе?

  • до 4 часов
  • в 43 видео уроках
  • построения автоматизации с нуля на Selenium + Java (а также Selenide, JUnit, Maven, Allure Reporting, Intellij Idea)
  • сложного приложения по типу эксель таблиц
  • с использованием
    • шаблонов PageObject/ElementObject/Widget, Fluent PageObject
    • практик и подходов обьектно ориентированного программирования (ООП)
      • Инкапсуляция
      • Композиция, Аггрегация
      • техник DRY (Don’t Repeat Yourself) и KISS (Keep It Simple Stupid)
    • Selenide как враппера вокруг Selenium для лаконичных и читабельных тестов, адаптированных под динамические веб приложения
  • покрывая вопросы
    • старта автоматизации на проекте, планирования и определения приоритетов
    • структуры проекта
    • построения удобных и эффективных локаторов (Css Selectors, XPath, Selenide)
    • структуры и стиля тестов (End to End vs Atomic tests)
    • стиля проверок в тестах (явные и неявные, точные и "слабые" проверки)
    • построения тест сьютов
    • особенностях работы с Selenide, рецептов по решению распространенных проблем при работе с Selenium WebDriver
    • эффективных практик написания простого, читабельного, само-документируемого, гибкого и поддерживаемого кода
  • с акцентом на читабельность и удобноство использования построенного тест фреймворка и тестовой модели (в виде обьектов страниц и сложных элементов (аля виджетов)) даже новичками в программировании и автоматизации
    • с BDD-стилистикой структуры JUnit-тестов
    • и красивыми детальными репортами (Allure)
  • в стиле "Менеджер будет счастлив"

Для кого?

  • для начинающих строить автоматизацию на своих проектах с нуля, и не знающих с чего и как лучше начать
  • для автоматизаторов с опытом написания тестов с помощью Selenium и желающих познакомиться с некоторыми лучшими практиками в области построения автоматизации, разобрать наболевшие вопросы, научиться писать чистый качественный код.
  • для новичков
    • с базовыми знаниями о Css Selectors, Selenium, OOP (классы, объекты, конструкторы, инкапсуляция)
    • за счет Top Down design, использования Selenide и доступного объяснения - этих базовых знаний должно быть достаточно для полного понимания всего остального

Примеры кода с подходами описаными в курсе?

THEN("Adds one more column for data and fill its cell");
app.table().addColumnAfter(0, "login valid?");
app.table().row(0).cell(1).fill("true");
app.table().shouldHaveRows(
    asList("1", "true")
);

THEN("Adds one more row with both connected data storage data and new expected result data");
menu = app.table().row(0).cell(0).menu();
menu.open();
menu.select("Insert row below");
app.table().row(1).fill("2", "false");
app.table().shouldHaveRows(
    asList("1", "true"),
    asList("2", "false")
);

или так:

WHEN().table().addColumnAfter(0, "login valid?");
AND().table().row(0).cell(1).fill("true");
THEN().table().shouldHaveRows(
    asList("1", "true")
);

WHEN().table().row(0).cell(0).menu().open()
    .select("Insert row below");
AND().table().row(1).fill("2", "false");
THEN().table().shouldHaveRows(
    asList("1", "true"),
    asList("2", "false")
);

Почему Selenide?

Цель этого курса в первую очередь - научиться использовать техники объектно ориентированного программирования, использовать эффективно шаблон Widget/ElementObject/PageObject, научиться правильно строить автоматизированный тестовый сценарий, не отвлекаясь на технические детали работы с чистым WebDriver, настройку ожиданий и так далее, не писать с нуля свою обертку вокруг Selenium Webdriver, без которой невозможно построить простые лаконичные пейдж обджекты и виджеты. Selenide - просто предоставляет удобный API для наших задач. Научившись всем вышеупомянутым техникам, которые никак не связаны именно с использованием Selenide - потом можно будет также их использовать и в связке с другими библиотеками. Конечно, в курс также входят и нюансы специфичные чисто с Selenide, когда полезно их упомянуть.

1 лайк