A locator matched more than one element, but the action requires exactly one. Playwright's strict mode (enabled by default) prevents ambiguous interactions.
// Too broad:
await page.locator('button').click();
// Specific:
await page.locator('button[data-testid="submit"]').click();
// Or use .first(), .nth(), .last():
await page.locator('button').first().click();Narrow down the selector to match exactly one element, or explicitly pick which one you want.
await page.getByRole('button', { name: 'Submit' }).click();Role-based selectors are more resilient and usually more specific than CSS selectors.
ObserveOne identifies ambiguous selectors in your test suite and recommends unique, resilient alternatives.
Start Monitoring FreePlaywright waited for an element matching the given selector but it did not appear within the timeout. The element may not exist, may be hidden, or may appear under a different selector.
The target element exists in the DOM but is not visible. Playwright requires elements to be visible before interacting with them (clicking, typing, etc.).
The default action timeout (30 seconds) was exceeded before the operation could complete. This commonly occurs during navigation, element waits, or network-dependent operations.
Navigation to the target URL did not complete within the timeout period. The page either failed to respond or took too long to reach the 'load' event.
Another element (like a modal, overlay, or tooltip) is covering the target element, preventing Playwright from clicking it.