selectOption() funciona apenas em elementos nativos nativos

O caso mais simples: um elemento HTML . Para dropdowns customizados, você precisa de uma abordagem diferente.

Componentes dropdown customizados

A maioria dos apps modernos usa componentes dropdown customizados (React Select, Headless UI, Material UI) em vez de ou um

/

O React Select usa classes CSS específicas. Se sua versão gera nomes de classe diferentes, adapte conforme necessário. Prefira getByRole quando possível:

// Melhor — usa roles semânticos
await page.getByRole('combobox', { name: 'Country' }).click();
await page.getByRole('option', { name: 'Germany' }).click();

// <select multiple> nativo
await page.getByLabel('Skills').selectOption(['playwright', 'typescript', 'cicd']);

// Multi-select customizado: clicar em múltiplas opções
await page.getByRole('button', { name: 'Skills' }).click();
await page.getByRole('option', { name: 'Playwright' }).click();
await page.getByRole('option', { name: 'TypeScript' }).click();
await page.getByRole('option', { name: 'CI/CD' }).click();

// Fechar o dropdown
await page.keyboard.press('Escape');

// Verificar seleções
await expect(page.getByTestId('selected-skills')).toContainText('Playwright');
await expect(page.getByTestId('selected-skills')).toContainText('TypeScript');

Inputs de data com dropdowns separados para mês, dia e ano:

await page.getByLabel('Month').selectOption('June');
await page.getByLabel('Day').selectOption('15');
await page.getByLabel('Year').selectOption('1990');

Para :

// Funciona cross-browser
await page.getByLabel('Date of birth').fill('1990-06-15');

// Verificar
await expect(page.getByLabel('Date of birth')).toHaveValue('1990-06-15');

Verificando as opções do dropdown

// Verifica que todas as opções estão presentes
const options = await page.getByLabel('Country').locator('option').allTextContents();
expect(options).toContain('Germany');
expect(options).toContain('Poland');

// Verifica que uma opção específica está desabilitada
await expect(page.getByRole('option', { name: 'Out of stock item' })).toBeDisabled();

// Verifica a quantidade de opções
const optionCount = await page.getByLabel('Category').locator('option').count();
expect(optionCount).toBeGreaterThan(0);

Erros comuns

Usar selectOption() em um dropdown customizado. Funciona apenas em