Dos coincidencias necesitan una decisión de producto.
Limita el control repetido al registro previsto antes de hacer pasar el clic.

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

Una página tiene dos botones Apply: actualizaciones semanales y avisos de seguridad. Un test generado recibe un error de selección estricta. first() permite el clic, pero ahora el orden del documento elige el ajuste. El test necesita el registro previsto.
La guía de locators exige una sola coincidencia para operaciones sobre un elemento. Varias hacen ambiguo el clic. count() admite varios elementos: contar dos y fallar al pulsar son observaciones compatibles.
Revisa las dos coincidencias
Lee los controles con títulos, etiquetas y registros cercanos. Repetir una etiqueta en tarjetas distintas puede ser correcto; un duplicado accidental en una puede ser un defecto. Comprueba el requisito antes de cambiar el selector.
Nuestro ejemplo inventado contiene dos regiones con nombre, botón Apply y estado local. No hay servidor, cuenta real ni ajuste guardado. Comprobamos qué región cambia y que la vecina no cambie.
const weekly = page.getByRole('region', { name: 'Weekly updates' });
const apply = weekly.getByRole('button', { name: 'Apply', exact: true });
await expect(apply).toHaveCount(1);
await apply.click();
await expect(weekly.getByRole('status')).toHaveText('Applied');Necesitas el runner Playwright y expect importado. La fixture proporciona nombre y manejador. El estado prueba un efecto local de interfaz, no persistencia ni entrega de un aviso.
Justifica el ámbito
Elige el padre según el registro o componente previsto. Aquí sirve el nombre accesible. Otra interfaz puede necesitar una fila filtrada por un nombre estable o un identificador de test acordado. Revisa la identidad después de ordenar o insertar.
El texto exacto no distingue dos botones iguales dentro de la misma región. La comprobación de cantidad expone una suposición de unicidad incorrecta antes de actuar. Conserva también la cantidad global si la estructura repetida forma parte del requisito.
El locator se resuelve al usarlo. La página puede cambiar entre observaciones; contar no bloquea un nodo DOM. Playwright sigue aplicando sus comprobaciones al clic. El recuento previo no garantiza una página inmóvil.
Una posición necesita un contrato de orden
first(), last() y nth() pueden seleccionar otro elemento tras cambios. Una posición es válida cuando el requisito trata del orden, como el primer resultado clasificado. Comprueba orden e identidad. Que desaparezca el error no lo justifica.
El test local confirma dos coincidencias, captura el error estricto y comprueba estados sin cambios. Después pulsa en Weekly updates y verifica seguridad sin cambios. Comprueba ese límite, no diagnostica todos los errores de selección.
Anota componente, identidad estable y cambio previsto. AnyTest describe exploración de apps y tests para revisión humana. Revisa los controles repetidos frente al registro previsto. No se afirma ningún algoritmo concreto de selección de AnyTest.
Preguntas comunes
¿El texto exacto distingue etiquetas idénticas?
No. Limita también la región o el registro.
¿first() siempre está mal?
No. Necesita un orden requerido y una identidad comprobada.