«Моя команда разработчиков использует Playwright в качестве фреймворка сквозного тестирования в проекте на TypeScript/Svelte. Хотя создатели Playwright хвастаются устойчивостью и «отсутствием flaky-тестов«, по моему опыту это не всегда так. Если у вас проблемы с Playwright, попробуйте воспользоваться этими советами.
Настройка ретраев падающих тестов
Иногда тесты Playwright обнаруживают проблемы, которые не проявляются при ручном тестировании. Это может указывать на то, что тесты нестабильные, то есть тесты, которые не срабатывают изначально, но проходят при повторном запуске (retry). Если это так, возможно, вам следует увеличить количество повторных попыток (ретраев) для такого теста (здесь документация). По умолчанию Playwright запускает все тесты один раз. Повторные запуски настраиваются в конфигурационном файле Playwright:
import type { PlaywrightTestConfig } from "@playwright/test"; const config: PlaywrightTestConfig = { // ... retries: 3, }
Забывайте о .type
Метод .type
устарел и должен быть заменен на .fill
(документация), если у вас на странице нет слушателей событий, которые срабатывают только при вводе текста. Мы использовали .type
в случаях, которые зависели от событий нажатия клавиш. В этих случаях нужно использовать .pressSequentially
. Метод .pressSequentially
фокусирует элемент, а затем отправляет события клавиши “Нажатие”, “Удержание” и “Отпускание” для каждого символа в тексте, в то время как .fill
лишь устанавливает значение поля ввода.
waitForTimeout
Хотя я не рекомендую использовать его во всех ситуациях, waitForTimeout может быть последним вариантом, если у вас постоянные проблемы, вызванные тем, что тесты запускаются до того как все элементы загрузятся на странице.
await page.waitForTimeout(500);
Группировка тестов
Удобно группировать тесты внутри блоков describe
, объединяя тесты, проверяющие схожие действия. Это облегчает поиск тестов и устранение проблем на нужных страницах.
test.describe('Login page', { tag: '@login’, }, () => { test('Incorrect password validation', async ({ page }) => { // ... }); test('Successful login', async ({ page }) => { // ... }); });
Также можно запустить группу тестов с определенным тегом из терминала. Это удобная альтернатива добавлению .only
во все файлы тестов.
npx playwright test --grep @login
Если ошибки у вас возникают не часто, надеюсь, эти советы вам пригодятся.»