🐛 Частые ошибки

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

⚡ Топ-3 ошибки

  • Хрупкие CSS-цепочки вместо роли/текста
  • Strict mode violation — локатор неоднозначен
  • assert вместо web-first expect()

1. Хрупкие локаторы

# ❌ Сломается при смене вёрстки
page.locator("div.container > div:nth-child(3) > button.btn.btn-primary")

# ✅ Устойчиво — по смыслу элемента
page.get_by_role("button", name="Сохранить")

2. Strict mode violation

Симптом: Error: strict mode violation: locator resolved to 3 elements
# ❌ Несколько кнопок "Добавить"
page.get_by_role("button", name="Добавить").click()

# ✅ Уточнить контекст
page.get_by_role("listitem").filter(has_text="Молоко") \
    .get_by_role("button", name="Добавить").click()

3. assert вместо expect()

# ❌ Снимок — флакает, если элемент не успел появиться
assert page.locator(".toast").is_visible()

# ✅ expect ждёт
expect(page.locator(".toast")).to_be_visible()

4. Лишние ручные ожидания

Не добавляйте time.sleep() «на всякий случай». Авто-ожидание уже встроено; ручные паузы лишь замедляют тесты.

5. type() вместо fill()

Для ввода значения используйте fill() (быстро, очищает поле). Посимвольный press_sequentially() нужен лишь там, где важны события клавиатуры (автодополнение).

⚠️ Тексты ошибок зависят от версии Playwright.