Урок 12. Summary session 6

📁 Блок: Selenium ⏱️ Время изучения: ~30 мин 🎯 Сложность: Продвинутая
#summary #POM #PageObject #BasePage #BaseTest #fixtures #scope-class #повторение

⚡ Кратко: Summary session 6

Summary session 6 — повторение ключевых тем урока 11: Page Object Model (POM), BasePage, инкапсуляция локаторов, структура POM-проекта, pytest-фикстуры с scope="class", базовый тестовый класс BaseTest.

  • POM: каждая страница → класс; локаторы и методы — в классе; тесты вызывают только методы страниц
  • BasePage: find(locator), click(locator), type_text(locator, text) — общие методы для наследования
  • scope="class": один браузер на весь класс тестов; быстрее, но тесты не должны оставлять грязное состояние
  • BaseTest: @pytest.fixture(scope="class", autouse=True) — инициализирует driver и Page Objects; тестовые классы наследуются и получают self.driver, self.login_page
  • Структура: pages/ + tests/ + conftest.py; в каждой папке — __init__.py

Топ-3 ошибки: 1) Локаторы прямо в тестах, а не в классе страницы. 2) scope="class", тесты оставляют браузер в «грязном» состоянии — следующий тест падает. 3) Забыли __init__.py в pages/ModuleNotFoundError.

📖 О чём этот урок

Это урок-повторение блока «Page Object Model». Закрепляем всё, что изучали в уроке 11: зачем нужен POM, как строится структура проекта, что такое BasePage и BaseTest, как работают фикстуры с scope="class".

В этом уроке также разобраны вопросы экспресс-опроса из лекции и полное ДЗ на POM: checkout через три страницы с проверкой итоговой суммы $58.29.

Урок завершает блок Selenium (уроки 03–12). После него — переход к API-тестированию на библиотеке Requests.

Что повторим

  • Проблема тестов без POM: дублирование локаторов, сложность поддержки
  • Принципы POM: инкапсуляция, централизованное управление, переиспользование
  • Классы страниц: LoginPage, InventoryPage, CartPage, CheckoutPage
  • Базовый класс BasePage с общими методами (find, click, type_text)
  • pytest-фикстуры в классах: scope="class", autouse=True
  • Базовый тестовый класс BaseTest и наследование от него
  • Структура проекта: pages/, tests/, conftest.py, __init__.py
  • Разбор ДЗ: checkout через POM с проверкой итоговой суммы

📚 Что повторить перед изучением

  • ← Урок 11: Page Object Model — паттерн POM
  • Классы Python: __init__, наследование, self
  • pytest-фикстуры: @pytest.fixture, yield, scope
  • WebDriverWait + EC: явные ожидания
  • Локаторы: By.ID, By.CLASS_NAME, By.XPATH
  • Структура Python-пакетов: __init__.py, from pages.login_page import LoginPage

🎯 Что изучать дальше