Decide la respuesta del diálogo antes del clic.
Responde a la confirmación nativa y comprueba qué cambian realmente la aceptación y la cancelación.

Edición traducida. Los identificadores técnicos permanecen en su forma original.

La prueba pulsa Eliminar borrador de demostración. Aparece una confirmación del navegador. Un controlador imprime el mensaje, pero no responde. El clic nunca termina: la aplicación espera una respuesta, no otro tiempo de espera. Observar un diálogo sin contestarlo puede bloquear una prueba sencilla.
Esta guía sigue la documentación de diálogos de Playwright con un borrador local inventado. No elimina documentos reales ni envía solicitudes al servidor. Comprueba ambas respuestas a confirm y sus resultados visibles. La política se decide antes de abrir el diálogo.
La confirmación nativa no es un modal de página
Un diálogo JavaScript confirm pertenece al navegador, no al HTML que getByRole puede manejar. Un modal diseñado por la aplicación es distinto: puede tener un rol de diálogo y botones normales. Identifica primero el mecanismo.
Playwright descarta los diálogos nativos automáticamente si no hay controlador. Si registras uno, debe aceptar o descartar. Registrar solo el mensaje puede bloquear la acción. Por eso añadir información de depuración puede cambiar el comportamiento de la prueba.
Registra la respuesta antes de actuar
Añade el controlador antes del clic. Si esperas exactamente un diálogo, usa un controlador de una sola ejecución y deja visible la respuesta elegida. Para cancelar y conservar el borrador:
let observed;
page.once('dialog', async dialog => {
observed = { type: dialog.type(), message: dialog.message() };
await dialog.dismiss();
});
await page.getByRole('button', { name: 'Remove demo draft' }).click();
expect(observed).toEqual({ type: 'confirm', message: 'Remove demo draft?' });
await expect(page.getByRole('status')).toHaveText('Demo draft kept');El ejemplo requiere la muestra controlada e importar expect. El controlador responde primero; después del clic se verifican tipo y mensaje. Así, una aserción fallida dentro del controlador no deja abierto un diálogo inesperado.
Para una aceptación autorizada, añade un controlador nuevo que llame a accept(), repite con una muestra nueva y verifica el estado local. No reutilices un controlador que acepte todo en recorridos diferentes: una futura confirmación podría pedir otra acción destructiva y recibir un sí silencioso.
La cancelación necesita una expectativa de producto
Descartar demuestra la respuesta suministrada, no que la aplicación la respetó. Comprueba que el borrador sigue disponible y que la siguiente acción útil funciona. En un producto real, añade evidencia admitida de que el registro del servidor no se eliminó.
La aceptación exige lo mismo. Que desaparezca la confirmación no prueba la eliminación. Define el registro controlado, el entorno autorizado y el resultado final. La muestra solo cambia un estado visible, por lo que su captura no demuestra efectos del servidor.
Los diálogos inesperados deben producir un fallo claro, no desaparecer gracias a un controlador amplio. Guarda suficiente contexto para entender la diferencia, sin publicar texto privado. Los mensajes pueden contener nombres de registros o datos de cuenta.
Limita la duración del controlador
Un controlador on() sigue activo hasta retirarlo o cerrar la página. Puede servir para una secuencia deliberada, pero esa secuencia debe nombrar los tipos, mensajes y respuestas. once() expresa mejor el caso de un solo diálogo.
Un prompt añade un valor de entrada a la aceptación. beforeunload tiene su propio manejo y opciones de cierre documentadas. No supongas que esta confirmación cubre esos casos: consulta la API de la función real antes de ampliar la suite.
La nota de resultado puede ser breve: mensaje esperado, cancelar conserva, la aceptación autorizada elimina y la evidencia del servidor se verifica aparte. Es más útil que registrar únicamente cuándo apareció el diálogo.
AnyTest describe pruebas revisables tras explorar una aplicación. Pregunta si el recorrido responde a la confirmación esperada o acepta todo lo que encuentra. No se afirma una función de diálogos de AnyTest. Las respuestas deliberadas protegen el significado de la prueba; las aserciones posteriores protegen la función.
Preguntas comunes
¿Por qué un controlador que solo registra el diálogo bloquea el clic?
Los diálogos nativos bloquean la página. Un controlador registrado debe aceptar o descartar el diálogo.
¿Descartar la confirmación prueba que funcionó la cancelación?
No. Comprueba el estado conservado y, cuando corresponda, la evidencia del servidor.