atelier-playwright

Des locators robustes et efficaces

Un Locator est un objet qui permet de localiser un élément dans une page web. Il est utilisé pour identifier et accéder à des éléments tels que des boutons, des liens, des formulaires et des images dans le code de test. Nous allons voir comment créer des Locators avec différentes stratégies.

Locators et sélecteurs

On peut créer un Locator avec un sélecteur, comme les sélecteurs XPath ou CSS par exemple.

await page.locator('data-test-id=directions').click();
//         ⮤ Locator ⮤ Selector              ⮤ méthode

Pour mettre en pratique, nous allons tester cette application de liste à faire https://demo.playwright.dev/todomvc/

Pour vous aider :

XPath

import { test } from '@playwright/test';

test('test', async ({ page }) => {
  await page.goto('https://demo.playwright.dev/todomvc/');

  // TODO Créer un Locator avec un sélecteur XPath ciblant le champ 'What needs to be done ?'
  // Remplir le champ avec 'Salade'
  // Appuyer sur entrée
});

CSS

import { test } from '@playwright/test';

test('test', async ({ page }) => {
  await page.goto('https://demo.playwright.dev/todomvc/');

  // ..
  // TODO Créer un Locator avec un sélecteur CSS ciblant le champ 'What needs to be done ?'
  // Remplir le champ avec 'Tomate'
  // Appuyer sur entrée
});

Texte

import { test } from '@playwright/test';

test('test', async ({ page }) => {
  await page.goto('https://demo.playwright.dev/todomvc/');

  // ..
  // TODO Créer un Locator avec un sélecteur texte ciblant le bouton 'Completed'
  // Le mettre en surlignement (highlight)
});

Bonus : essayez de sélectionner et de remplir le champ ‘What needs to be done ?’

Conclusion

Quelles différences entre ces sélecteurs ?

Testing Library

Playwright offre en plus une syntaxe inspirée de Testing Library. Ca n’est pas un hasard puisque c’est le créateur de Testing Library, Kent C. Dodds, est ambassadeur Playwright.

await page.getByLabel('User Name').fill('John');

await page.getByLabel('Password').fill('secret-password');

await page.getByRole('button', { name: 'Sign in' }).click();

await expect(page.getByText('Welcome, John!')).toBeVisible();

Documentation complète https://playwright.dev/docs/locators

Mise en pratique

import { test } from '@playwright/test';

test('test', async ({ page }) => {
  await page.goto('https://demo.playwright.dev/todomvc/');

  // ..
  // TODO Créer un Locator ciblant le champ 'What needs to be done ?'
  // Remplir le champ avec 'Tomate'
  // Appuyer sur entrée
});

Conclusion

Quelles différences avec les sélecteurs ?


Solution

import { test } from '@playwright/test';

test('test', async ({ page }) => {
  await page.goto('https://demo.playwright.dev/todomvc/');
  
  const locatorXPath = page.locator('xpath=/html/body/section/div/header/input');
  await locatorXPath.fill('Salade');
  await locatorXPath.press('Enter');

  const locatorCSS = page.locator('css=.new-todo');
  await locatorCSS.fill('Tomate');
  await locatorCSS.press('Enter');

  await page.locator('text=Completed').highlight();

  const locatorTestingLibrary = page.getByPlaceholder('What needs');
  await locatorTestingLibrary.fill('oignons');
  await locatorTestingLibrary.press('Enter');
});


Références
https://playwright.dev/docs/other-locators
https://playwright.dev/docs/locators
https://playwright.dev/docs/best-practices