Créons un test avec l’aide de Codegen.
ℹ️ note
C’est facile de cliquer sur élément pour avoir le Locator et ensuite écrire une assertion s’en servant
Que notez vous ?
Pour accéder au panier de manière plus robuste, plusieurs options. Essayons avec Codegen pour tester plusieurs Locators.
Consultons la documentation
https://playwright.dev/docs/api/class-framelocator#frame-locator-get-by-role
getByRole('link', { name: 'Cart (1)' })
getByRole('link', { name: 'Cart' })
getByRole('link', { name: 'Cart', exact: true })
getByRole('link', { name: /Cart \(\d+\)/ })
Le Locator généré par Codegen pour les “Doc Martins”.
await page.locator('div:nth-child(14) > .card_card__3PD-S > .shoes-card_card__XNGLs > .shoes-card_footer__14csi > .button_button__1z7bF').click();
Commençons par trouver toutes les cartes. Nous allons ensuite filter pour trouver celle qui contient le texte “Doc Martins”.
https://playwright.dev/docs/locators#filtering-locators
Nous avons un Locator robuste pour la carte des “Doc Martins”. Pour trouver le bouton dans cette carte, nous allons chainer les locators.
https://playwright.dev/docs/locators#chaining-locators
Solution
import { test, expect } from '@playwright/test';
test('test', async ({ page }) => {
await page.goto('https://bit-shoe-store.netlify.app/');
await page.getByRole('link', { name: 'Women' }).click();
await page
.locator('.card_card__3PD-S')
.filter({ hasText: 'Doc Martins' })
.getByText('see product details')
.click();
await page
.getByRole('combobox', { name: 'Choose a size:' })
.selectOption('39');
await page.getByTestId('black').click();
await page.getByRole('button', { name: 'Add to Cart' }).click();
await page.getByRole('link', { name: 'Cart' }).click();
await expect(page.getByTestId('test-currency')).toContainText('280');
});
Références
https://playwright.dev/docs/api/class-page#page-get-by-text
https://playwright.dev/docs/best-practices
https://playwright.dev/docs/locators