</>

Technology

Playwright

Difficulty

Beginner

Interview Question

How do you handle checkboxes and radio buttons in Playwright?

Answer

Handling Checkboxes in Playwright

Check a Checkbox

TypeScript
// By label (most readable)
await page.getByLabel('I agree to Terms').check();

// By test ID
await page.getByTestId('terms-checkbox').check();

// By role
await page.getByRole('checkbox', { name: 'Remember me' }).check();

Uncheck a Checkbox

TypeScript
await page.getByLabel('Subscribe to newsletter').uncheck();

Toggle Based on Desired State

TypeScript
// Check if not already checked; uncheck if already checked
await page.getByLabel('Dark mode').setChecked(true);   // Always check
await page.getByLabel('Dark mode').setChecked(false);  // Always uncheck

Verify Checkbox State

TypeScript
await expect(page.getByLabel('Terms')).toBeChecked();
await expect(page.getByLabel('Newsletter')).not.toBeChecked();

Get Checkbox State

TypeScript
const isChecked = await page.getByLabel('Terms').isChecked();
console.log(isChecked); // true or false

Handling Radio Buttons

Radio buttons work similarly — use check() to select one:

TypeScript
// Select a radio option by label
await page.getByLabel('Male').check();
await page.getByLabel('Female').check();
await page.getByLabel('Other').check();

// By value attribute
await page.locator('input[name="gender"][value="male"]').check();

Verify Radio Button Selection

TypeScript
await expect(page.getByLabel('Male')).toBeChecked();
await expect(page.getByLabel('Female')).not.toBeChecked();

Full Form Example

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

test('registration form with checkboxes', async ({ page }) => {
  await page.goto('/register');

  await page.getByLabel('Full Name').fill('Jane Doe');

  // Radio button
  await page.getByLabel('Female').check();

  // Checkboxes
  await page.getByLabel('I agree to Terms and Conditions').check();
  await page.getByLabel('Subscribe to newsletter').setChecked(true);

  // Verify
  await expect(page.getByLabel('Female')).toBeChecked();
  await expect(page.getByLabel('I agree to Terms and Conditions')).toBeChecked();

  await page.getByRole('button', { name: 'Register' }).click();
  await expect(page).toHaveURL('/success');
});

Follow AutomateQA

Related Topics