💻 Примеры: локаторы в деле

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

⚡ Логин одним взглядом

page.get_by_label("Username").fill("standard_user")
page.get_by_label("Password").fill("secret_sauce")
page.get_by_role("button", name="Login").click()
expect(page.get_by_text("Products")).to_be_visible()

Пример 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()