Пример 1. Логин-форма
Учебный сайт saucedemo.com (тот же, что в Selenium-уроках).
# test_login.py
from playwright.sync_api import Page, expect
def test_login(page: Page):
page.goto("https://www.saucedemo.com/")
page.get_by_placeholder("Username").fill("standard_user")
page.get_by_placeholder("Password").fill("secret_sauce")
page.get_by_role("button", name="Login").click()
# после логина видим каталог
expect(page.get_by_text("Products")).to_be_visible()
expect(page).to_have_url("https://www.saucedemo.com/inventory.html")
Пример 2. Список товаров и фильтрация
# test_inventory.py
from playwright.sync_api import Page, expect
def test_add_one_product(page: Page):
# ... после логина ...
items = page.get_by_test_id("inventory-item")
expect(items).to_have_count(6)
# найти карточку с нужным товаром и нажать "Add to cart" внутри неё
backpack = items.filter(has_text="Sauce Labs Backpack")
backpack.get_by_role("button", name="Add to cart").click()
# счётчик корзины стал 1
expect(page.get_by_test_id("shopping-cart-badge")).to_have_text("1")
⚠️ Имена
data-testid зависят от версии сайта — это иллюстрация подхода. Реальные локаторы проверяйте через codegen/инспектор.
Пример 3. Чекбоксы, селекты, клавиши
page.get_by_label("Я согласен с условиями").check()
expect(page.get_by_label("Я согласен с условиями")).to_be_checked()
page.get_by_label("Страна").select_option("RU")
page.get_by_role("searchbox").fill("playwright")
page.get_by_role("searchbox").press("Enter")
Пример 4. Проверки списка
from playwright.sync_api import Page, expect
def test_list(page: Page):
page.goto("https://example.com/todos")
todos = page.get_by_role("listitem")
expect(todos).to_have_count(3)
# проверить точный набор текстов по порядку
expect(todos).to_have_text(["Купить молоко", "Помыть посуду", "Позвонить маме"])
Пример 5. Уточнение при strict mode
# ❌ Если кнопок "Купить" несколько — strict mode violation
page.get_by_role("button", name="Купить").click()
# ✅ Уточняем, какую именно
page.get_by_role("listitem").filter(has_text="Книга").get_by_role("button", name="Купить").click()