Glossaire · Automatisation de l’UI
Page Object Model (POM)
En anglais : Page Object Model
Également appelé : POM, page object, page objects, modèle page objet
Définition
Design pattern qui encapsule chaque page ou composant de l'interface dans une classe, pour que les tests appellent des méthodes métier au lieu de répéter les locators.
Le Page Object Model (POM) regroupe dans une seule classe tout ce qu’un test doit savoir d’une page : ses locators et les actions qu’un utilisateur peut y effectuer. Les tests se lisent alors comme le parcours utilisateur (loginPage.signIn(user)), et lorsque le markup change, vous corrigez une seule classe au lieu de chaque test.
Un exemple minimal (Playwright, TypeScript)
import { type Page, type Locator } from '@playwright/test';
export class LoginPage {
readonly email: Locator;
readonly password: Locator;
readonly submit: Locator;
constructor(private readonly page: Page) {
this.email = page.getByLabel('Email');
this.password = page.getByLabel('Password');
this.submit = page.getByRole('button', { name: 'Sign in' });
}
async goto() {
await this.page.goto('/login');
}
async signIn(email: string, password: string) {
await this.email.fill(email);
await this.password.fill(password);
await this.submit.click();
}
}
Les règles qui gardent les page objects utiles
- Pas d’assertions dans les page objects, sauf pour vérifier que la page elle-même s’est chargée. C’est le test qui décide de ce que « correct » veut dire.
- Renvoyez le page object suivant depuis les actions qui naviguent, ou ne renvoyez rien. Évitez de renvoyer des handles d’éléments bruts.
- Modélisez des composants, pas seulement des pages. Un en-tête, un tableau de données ou un sélecteur de date présent sur de nombreuses pages mérite sa propre classe.
- Gardez-les légers. Les règles métier, les données de test et les appels d’API relèvent d’autres couches, comme les fixtures et les clients d’API.
Critique fréquente
Les gros page objects deviennent des « god classes » aux dizaines de méthodes. Les découper par composant, et utiliser des fixtures pour créer les page objects de chaque test, permet de les garder petits. Certaines équipes préfèrent le pattern Screenplay pour les très grosses suites, mais le POM reste la structure la plus répandue dans les frameworks Selenium et Playwright, et celle que les recruteurs s’attendent à vous voir expliquer en entretien.