🔖 Справочник: POM — шпаргалка

← К оглавлению урока

⚡ Шпаргалка POM

  • pages/__init__.py — пустой, делает папку пакетом
  • BasePage.__init__(driver)self.driver, self.wait = WebDriverWait(driver, 10)
  • Локатор как атрибут: LOCATOR = (By.ID, "value")
  • @pytest.fixture(scope="class") — один driver на класс тестов
  • @pytest.fixture(scope="class", autouse=True) — автоматическая инициализация в BaseTest
  • Импорт: from pages.login_page import LoginPage
  • class TestFoo(BaseTest): → доступны self.driver, self.login_page, …

Структура проекта

saucedemo_tests/
├── conftest.py              # глобальные фикстуры
├── pages/
│   ├── __init__.py          # пустой
│   ├── base_page.py         # BasePage
│   ├── login_page.py        # LoginPage(BasePage)
│   ├── inventory_page.py    # InventoryPage(BasePage)
│   ├── cart_page.py         # CartPage(BasePage)
│   └── checkout_page.py     # CheckoutPage(BasePage)
└── tests/
    ├── __init__.py          # пустой
    ├── base_test.py         # BaseTest
    ├── test_login.py        # TestLogin(BaseTest)
    ├── test_inventory.py    # TestInventory(BaseTest)
    └── test_cart.py         # TestCart(BaseTest)

BasePage — шаблон

МетодОписаниеEC-условие
find(locator) Ожидает и возвращает элемент presence_of_element_located
click(locator) Ждёт кликабельности и кликает element_to_be_clickable
type_text(locator, text) Очищает и вводит текст presence_of_element_located
get_text(locator) Возвращает текст элемента presence_of_element_located
find_all(locator) Список всех элементов presence_of_all_elements_located
is_visible(locator) Проверяет видимость visibility_of_element_located

LoginPage — ключевые локаторы и методы

Атрибут/методЗначение/действие
USERNAME_INPUT(By.ID, "user-name")
PASSWORD_INPUT(By.ID, "password")
LOGIN_BUTTON(By.ID, "login-button")
ERROR_MESSAGE(By.CLASS_NAME, "error-message-container")
open()Открывает saucedemo.com
enter_username(username)Вводит логин
enter_password(password)Вводит пароль
click_login()Нажимает кнопку Login
success_login(user, pwd)Полный цикл авторизации
get_error_message()Текст ошибки

InventoryPage — ключевые методы

МетодОписание
get_items()Все элементы .inventory_item
get_items_amount()Количество товаров (должно быть 6)
get_item_names()Список названий товаров
get_item_price(item_name)Цена конкретного товара (XPath по названию)
add_item_to_cart(item_name)Нажимает кнопку «Add to cart» у товара
go_to_cart()Клик по иконке корзины
all_items_are_displayed()True, если все товары видны
all_item_names_contains_sauce_labs()True, если все названия начинаются с "Sauce Labs"

CartPage — ключевые методы

МетодОписание
get_cart_item_price(item_name)Цена товара в корзине (XPath по названию)
remove_item_from_cart(item_name)Удаляет товар из корзины
proceed_to_checkout()Клик по кнопке Checkout

CheckoutPage — ключевые методы

МетодОписание
fill_checkout_form(first, last, zip)Заполняет форму данными покупателя
get_total_price()Читает итоговую стоимость с Overview-страницы

BaseTest — шаблон

ЭлементОписание
@pytest.fixture(scope="class", autouse=True)Автоматически запускается для каждого класса-наследника
self.driverЭкземпляр WebDriver
self.login_pageLoginPage(self.driver)
self.inventory_pageInventoryPage(self.driver)
self.cart_pageCartPage(self.driver)
yieldРазделитель setup/teardown
self.driver.quit()Закрытие браузера после всех тестов класса

Запуск тестов

# Запуск всех тестов проекта
pytest tests/

# Запуск конкретного файла
pytest tests/test_inventory.py

# Запуск с подробным выводом
pytest tests/ -v

# Запуск с остановкой на первой ошибке
pytest tests/ -x