Glosario · Automatización de UI
Page Object Model (POM)
En inglés: Page Object Model
También llamado: POM, page object, page objects, modelo de objetos de página
Definición
Patrón de diseño que encapsula cada página o componente de la UI en una clase, para que los tests llamen a métodos de intención en lugar de repetir locators.
El Page Object Model (POM) reúne en una sola clase todo lo que un test necesita saber sobre una página: sus locators y las acciones que un usuario puede realizar en ella. Así, los tests se leen como el recorrido del usuario (loginPage.signIn(user)), y cuando cambia el marcado corriges una clase en lugar de todos los tests.
Un ejemplo mínimo (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();
}
}
Reglas que mantienen útiles los page objects
- Nada de aserciones dentro de los page objects, salvo las comprobaciones de que la propia página cargó. Es el test quien decide qué significa “correcto”.
- Devuelve el siguiente page object desde las acciones que navegan, o no devuelvas nada. Evita devolver referencias crudas a elementos.
- Modela componentes, no solo páginas. Una cabecera, una tabla de datos o un selector de fechas que aparece en muchas páginas merece su propia clase.
- Mantenlos delgados. Las reglas de negocio, los datos de prueba y las llamadas a la API pertenecen a otras capas, como los fixtures y los clientes de API.
Críticas habituales
Los page objects grandes se convierten en “clases dios” con decenas de métodos. Dividirlos por componentes y usar fixtures para crear los page objects de cada test los mantiene pequeños. Algunos equipos prefieren el patrón Screenplay para suites muy grandes, pero POM sigue siendo la estructura más común en frameworks de Selenium y Playwright, y la que los entrevistadores esperan que sepas explicar.