Playwright: устойчивый клик и проверка результата
В Playwright найдите элемент локатором, выполните click() и проверьте видимый результат. Для доступной кнопки начните с getByRole: это выражает намерение теста и меньше зависит от вложенности div.
Нажать кнопку и проверить результат
import { test, expect } from '@playwright/test';
test('сохранение настроек', async ({ page }) => {
await page.goto('/settings');
await page.getByRole('button', {
name: 'Сохранить', exact: true
}).click();
await expect(page.getByRole('status'))
.toHaveText('Настройки сохранены');
});Это пример теста для приложения с указанными маршрутом, кнопкой и статусом. Настройка baseURL должна быть задана в конфигурации вашего тестового проекта.
Если элемент не найден или неоднозначен
- Проверьте доступную роль и имя элемента.
- Убедитесь, что локатор выбирает ровно одну цель.
- Для нескольких одинаковых кнопок сузьте область до конкретного диалога или строки.
- Если элемент находится во фрейме, используйте локатор нужного фрейма.
Если клик блокируется
Перед действием Playwright проверяет готовность элемента. Найдите причину: перекрывающий диалог, disabled-состояние, анимация или элемент за пределами видимой области. Не добавляйте force только для получения зелёного теста: это может скрыть реальную невозможность действия для пользователя.
Почему не нужна фиксированная пауза
Пауза в несколько секунд может быть слишком короткой на медленном запуске и лишней на быстром. Ожидайте конкретное состояние интерфейса и используйте web-first assertions. Успешный click() подтверждает выполнение действия, но сам по себе не доказывает, что настройки сохранились на сервере.