✅ Решения

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

⚡ Кратко

POM + готовые фикстуры + --base-url + --tracing=retain-on-failure + -n auto.

Часть 1. Ответы

  1. Локаторы «ленивые» — это лишь описание поиска; реальный поиск идёт при действии, поэтому объявить их заранее безопасно.
  2. context/page создаются на каждый тест заново → тесты не делят состояние → их можно гонять параллельно.
  3. Переопределить фикстуру browser_context_args, добавив "viewport": {"width": ..., "height": ...}.
  4. --tracing=retain-on-failure; открыть — playwright show-trace <trace.zip>.
  5. Через него можно быстро подготовить данные (POST) или проверить результат (GET) без UI — тесты короче и стабильнее.

Часть 2 и 3. Эталон

# conftest.py
import pytest
from pages.login_page import LoginPage
from pages.inventory_page import InventoryPage

@pytest.fixture(scope="session")
def browser_context_args(browser_context_args):
    return {**browser_context_args, "viewport": {"width": 1440, "height": 900}}

@pytest.fixture
def login_page(page):
    return LoginPage(page)

@pytest.fixture
def inventory_page(page):
    return InventoryPage(page)
# tests/test_shop.py
from playwright.sync_api import expect

def test_add_backpack(login_page, inventory_page):
    login_page.open()                       # page.goto("/") + base_url
    login_page.login("standard_user", "secret_sauce")
    expect(inventory_page.title).to_be_visible()
    inventory_page.add_to_cart("Sauce Labs Backpack")
    expect(inventory_page.cart_badge).to_have_text("1")
# Запуск
pytest --base-url https://www.saucedemo.com \
       --tracing=retain-on-failure -n auto
⚠️ Реальные локаторы/классы saucedemo проверяйте через codegen — здесь важен подход.