Комбинируют действие с Promise.all/waitForURL/waitForResponse, либо полагаются на auto-wait assertions; избегают фиксированных waitForTimeout.
Разбор
- Паттерн: дождаться response, затем клик — или наоборот, в зависимости от гонки.
waitForLoadState('networkidle') хрупок при поллинге — используйте точечно.
- Для SPA важнее waitForURL и появление ключевого локатора.
- Timeout ошибки читайте в trace.
Пример
await Promise.all([
page.waitForResponse('**/api/orders'),
page.getByRole('button', { name: 'Buy' }).click(),
]);
Итог
Синхронизация — по событию (URL/response/locator), не по sleep.