Playwright gère les éléments natifs natifs

Le cas le plus simple : un élément HTML . Pour les dropdowns personnalisés, vous avez besoin d'une approche différente.

Composants dropdown personnalisés

La plupart des applications web modernes utilisent des composants dropdown personnalisés (React Select, Headless UI, Material UI) au lieu du ou un

/

React Select utilise des classes CSS spécifiques. Si votre version génère des noms de classe différents, adaptez en conséquence. Préférez getByRole quand c'est possible :

// Meilleur — utilise les rôles sémantiques
await page.getByRole('combobox', { name: 'Pays' }).click();
await page.getByRole('option', { name: 'Allemagne' }).click();

// <select multiple> natif
await page.getByLabel('Compétences').selectOption(['playwright', 'typescript', 'cicd']);

// Sélection multiple personnalisée : cliquer plusieurs options
await page.getByRole('button', { name: 'Compétences' }).click();
await page.getByRole('option', { name: 'Playwright' }).click();
await page.getByRole('option', { name: 'TypeScript' }).click();
await page.getByRole('option', { name: 'CI/CD' }).click();

// Fermer le dropdown
await page.keyboard.press('Escape');

// Vérifier les sélections
await expect(page.getByTestId('selected-skills')).toContainText('Playwright');
await expect(page.getByTestId('selected-skills')).toContainText('TypeScript');

Champs de date avec dropdowns séparés pour le mois, le jour et l'année :

await page.getByLabel('Mois').selectOption('Juin');
await page.getByLabel('Jour').selectOption('15');
await page.getByLabel('Année').selectOption('1990');

Pour les :

// Fonctionne sur tous les navigateurs
await page.getByLabel('Date de naissance').fill('1990-06-15');

// Vérifier
await expect(page.getByLabel('Date de naissance')).toHaveValue('1990-06-15');

Vérifier les options du dropdown

// Vérifier que toutes les options sont présentes
const options = await page.getByLabel('Pays').locator('option').allTextContents();
expect(options).toContain('Allemagne');
expect(options).toContain('Pologne');

// Vérifier qu'une option spécifique est désactivée
await expect(page.getByRole('option', { name: 'Article épuisé' })).toBeDisabled();

// Vérifier le nombre d'options
const optionCount = await page.getByLabel('Catégorie').locator('option').count();
expect(optionCount).toBeGreaterThan(0);

Erreurs courantes

Utiliser selectOption() sur un dropdown personnalisé. Fonctionne uniquement sur les