</>

Technology

Playwright

Difficulty

Beginner

Interview Question

How do you click an element in Playwright?

Answer

Clicking Elements in Playwright

Basic Click

TypeScript
// Using role locator
await page.getByRole('button', { name: 'Submit' }).click();

// Using text locator
await page.getByText('Login').click();

// Using CSS locator
await page.locator('#submit-btn').click();

// Using label-associated form button
await page.getByLabel('Search').click();

What Happens During click()

Playwright automatically:

  1. ✓Waits for the element to be visible in the DOM
  2. ✓Waits for it to be enabled (not disabled)
  3. ✓Waits for it to be stable (not animating)
  4. ✓Scrolls it into view if needed
  5. ✓Moves the mouse to the center of the element
  6. ✓Fires mousedown, mouseup, click events

Click Options

TypeScript
// Click with a modifier key
await page.locator('#item').click({ modifiers: ['Shift'] });   // Shift+Click
await page.locator('#item').click({ modifiers: ['Control'] }); // Ctrl+Click

// Click at a specific position within the element
await page.locator('#canvas').click({ position: { x: 100, y: 50 } });

// Click with a delay (simulate slow user)
await page.locator('#btn').click({ delay: 100 });

// Force click (bypass actionability checks — use carefully)
await page.locator('#hidden-btn').click({ force: true });

// Click with custom timeout
await page.locator('#btn').click({ timeout: 10000 });

Double Click

TypeScript
await page.locator('#cell').dblclick();

Right Click (Context Menu)

TypeScript
await page.locator('#item').click({ button: 'right' });

Middle Click

TypeScript
await page.locator('#link').click({ button: 'middle' });

Click Inside a Specific Parent

TypeScript
// Click a button within a specific modal
const modal = page.locator('.modal');
await modal.getByRole('button', { name: 'Confirm' }).click();

Full Example

TypeScript
import { test, expect } from '@playwright/test';

test('form submit', async ({ page }) => {
  await page.goto('/login');
  await page.getByLabel('Email').fill('user@test.com');
  await page.getByLabel('Password').fill('password123');
  await page.getByRole('button', { name: 'Sign in' }).click();
  await expect(page).toHaveURL('/dashboard');
});

Follow AutomateQA

Related Topics