selectOption() funciona solo en elementos nativos

El caso más simple: un elemento HTML . Para dropdowns personalizados necesitas un enfoque diferente.

Componentes dropdown personalizados

La mayoría de las apps web modernas usan componentes dropdown personalizados (React Select, Headless UI, Material UI) en lugar del o un

/

React Select usa clases CSS específicas. Si tu versión genera nombres de clase diferentes, adáptalo. Prefiere getByRole cuando sea posible:

// Mejor — 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 personalizado: clic en múltiples opciones
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();

// Cerrar el dropdown
await page.keyboard.press('Escape');

// Verificar las selecciones
await expect(page.getByTestId('selected-skills')).toContainText('Playwright');
await expect(page.getByTestId('selected-skills')).toContainText('TypeScript');

Inputs de fecha con dropdowns separados para mes, día y año:

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

Para :

// Funciona en todos los navegadores
await page.getByLabel('Date of birth').fill('1990-06-15');

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

Verificar las opciones del dropdown

// Verificar que todas las opciones están presentes
const options = await page.getByLabel('Country').locator('option').allTextContents();
expect(options).toContain('Germany');
expect(options).toContain('Poland');

// Verificar que una opción específica está deshabilitada
await expect(page.getByRole('option', { name: 'Out of stock item' })).toBeDisabled();

// Verificar la cantidad de opciones
const optionCount = await page.getByLabel('Category').locator('option').count();
expect(optionCount).toBeGreaterThan(0);

Errores comunes

Usar selectOption() en un dropdown personalizado

Solo funciona en