Assertions Playwright
Ce chapitre présente de manière complète le système d'assertions de Playwright, y compris les assertions avec réessai automatique, les assertions générales et l'utilisation des assertions souples.
Qu'est-ce qu'une assertion ?
Une assertion sert à vérifier si le résultat attendu d'un test correspond au résultat réel.
Playwright fournit deux ensembles d'assertions :les assertions générales(de Jest) etles assertions avec réessai automatique(propres à Playwright).
Assertions avec réessai automatique vs assertions générales
Assertions avec réessai automatique (matchers asynchrones)
Les assertions spécifiques au Web de Playwright réessayent automatiquement jusqu'à ce que la condition soit remplie ou qu'un délai d'attente se produise, et doivent utiliserawait。
Exemple
await expect(page.getByText('EXAMPLE')).toBeVisible();
Assertions générales
Utilisées pour les comparaisons de valeurs non spécifiques au Web ; ne réessaient pas automatiquement.
Exemple
expect(1 + 1).toBe(2);
expect('hello').toContain('ell');
expect(true).toBeTruthy();
| Type | Réessai automatique ? | await requis ? | Scénario d'application |
|---|---|---|---|
| Assertions avec réessai automatique | Oui | Requisawait | Contenu spécifique au Web tel que les éléments de page, l'URL, le titre, etc. |
| Assertions générales | non | Non requis | Valeurs JavaScript telles que les variables ordinaires, les tableaux, les objets, etc. |
Assertions au niveau de la page
Exemple
await expect(page).toHaveTitle('Ce que nous apprenons n'est pas seulement la technologie, mais aussi les rêves!');
await expect(page).toHaveTitle(/EXAMPLE/);
// Assertion sur l'URL de la page
await expect(page).toHaveURL('https://www.example.com/');
await expect(page).toHaveURL(/example\.com/);
Assertions de visibilité
Exemple
// L'élément est visible
await expect(btn).toBeVisible();
// L'élément n'est pas visible
await expect(btn).toBeHidden();
// L'élément existe dans le DOM (mais n'est pas nécessairement visible)
await expect(btn).toBeAttached();
// L'élément est visible dans la fenêtre d'affichage
await expect(btn).toBeInViewport();
Assertions sur le texte et la valeur
Exemple
// Le contenu textuel de l'élément correspond exactement
await expect(heading).toHaveText('Pas seulement la technologie, mais aussi les rêves !');
// Le contenu textuel de l'élément contient une sous-chaîne
await expect(heading).toContainText('technologie');
// Valeur actuelle du champ de saisie
await expect(page.getByLabel('nom d'utilisateur')).toHaveValue('example_user');
// Le contenu de l'élément est vide
await expect(page.getByTestId('error-msg')).toBeEmpty();
Assertions d'état
Exemple
const input = page.getByLabel('email');
// L'élément est activé
await expect(input).toBeEnabled();
// L'élément est désactivé
await expect(input).toBeDisabled();
// L'élément est modifiable
await expect(input).toBeEditable();
// La case à cocher est cochée
await expect(checkbox).toBeChecked();
// L'élément a le focus
await expect(input).toBeFocused();
Assertions d'attributs
Exemple
// Assertion d'attribut DOM
await expect(element).toHaveAttribute('src', '/static/images/logo.png');
// Vérifie uniquement que l'attribut existe
await expect(element).toHaveAttribute('alt');
// Assertion sur le nom de classe CSS
await expect(element).toHaveClass('logo-primary');
// Assertion sur la valeur de la propriété CSS
await expect(element).toHaveCSS('display', 'block');
// Assertion sur l'ID de l'élément
await expect(element).toHaveId('main-logo');
// Nom accessible
await expect(page.getByRole('button')).toHaveAccessibleName('Submit');
Assertions de comptage
Exemple
const items = page.getByRole('listitem');
await expect(items).toHaveCount(5);
// Utilisé avec filter
const activeItems = page.getByRole('listitem').filter({ hasText: 'Activated' });
await expect(activeItems).toHaveCount(3);
Référence rapide des assertions générales
| Méthode | Description | Exemple |
|---|---|---|
toBe(value) | Égalité stricte (===) | expect(x).toBe(42) |
toEqual(value) | Égalité profonde | expect(obj).toEqual({ a: 1 }) |
toContain(item) | Tableau/chaîne contient | expect(arr).toContain('a') |
toBeTruthy() | La valeur est truthy | expect(x).toBeTruthy() |
toBeFalsy() | La valeur est falsy | expect(x).toBeFalsy() |
toBeNull() | La valeur est null | expect(x).toBeNull() |
toBeGreaterThan(n) | Supérieur à n | expect(x).toBeGreaterThan(10) |
toBeLessThan(n) | Inférieur à n | expect(x).toBeLessThan(100) |
toHaveLength(n) | Longueur du tableau | expect(arr).toHaveLength(3) |
expect.soft() Assertions souples
Les assertions ordinaires interrompent le test immédiatement après un échec.
Assertions souplesNe s'arrêtent pas après un échec ; elles continuent d'exécuter le code suivant et rapportent tous les échecs uniformément à la fin du test.
Exemple
await page.goto('https://example.com/form');
// Assertion souple — un échec n'arrête pas le test
await expect.soft(page.getByLabel('username')).toBeVisible();
await expect.soft(page.getByLabel('password')).toBeVisible();
await expect.soft(page.getByLabel('email')).toBeVisible();
await expect.soft(page.getByRole('button', { name: 'Register' })).toBeEnabled();
// Si l'une des assertions ci-dessus échoue, la vérification se poursuit et tous les échecs sont signalés à la fin.
});
À utiliser lors du test de pages de formulaire
expect.soft()Vous pouvez découvrir tous les champs manquants d'un coup, sans avoir à les corriger un par un avant de voir le problème suivant. Cela améliore considérablement l'efficacité du débogage.
Délai d'expiration de l'assertion
Les assertions à réessai automatique ont un délai d'expiration par défaut de 5 secondes, qui peut être personnalisé dans le fichier de configuration ou pour une seule assertion :
Exemple
await expect(page.getByText('Loading...')).toBeHidden({ timeout: 10000 });
// Défini globalement dans le fichier de configuration
// playwright.config.ts:
// export default defineConfig({
// expect: { timeout: 10000 },
// });