Saltar al contenido principal

Matchers Personalizados

WebdriverIO utiliza una biblioteca de aserciones estilo Jest expect que viene con características especiales y matchers personalizados específicos para ejecutar pruebas web y móviles. Aunque la biblioteca de matchers es grande, ciertamente no se adapta a todas las situaciones posibles. Por lo tanto, es posible extender los matchers existentes con otros personalizados definidos por ti.

advertencia

Aunque actualmente no hay diferencia en cómo se definen los matchers que son específicos para el objeto browser o una instancia de element, esto ciertamente podría cambiar en el futuro. Mantén un ojo en webdriverio/expect-webdriverio#1408 para más información sobre este desarrollo.

Matchers Personalizados para el Navegador

Para registrar un matcher personalizado para el navegador, llama a extend en el objeto expect ya sea directamente en tu archivo de especificación o como parte del hook before en tu wdio.conf.js:

customMatchers/example.ts
loading...

Como se muestra en el ejemplo, la función matcher toma el objeto esperado, por ejemplo, el objeto browser o element, como primer parámetro y el valor esperado como segundo. Luego puedes usar el matcher de la siguiente manera:

customMatchers/example.ts
loading...

Matchers Personalizados para Elementos

Similar a los matchers personalizados del navegador, los matchers de elementos no difieren. Aquí hay un ejemplo de cómo crear un matcher personalizado para afirmar el aria-label de un elemento:

customMatchers/example.ts
loading...

Esto te permite llamar a la aserción de la siguiente manera:

customMatchers/example.ts
loading...

Soporte para TypeScript

Si estás usando TypeScript, se requiere un paso más para garantizar la seguridad de tipos de tus matchers personalizados. Al extender la interfaz Matcher con tus matchers personalizados, todos los problemas de tipo desaparecen:

customMatchers/example.ts
loading...

Si creaste un matcher asimétrico personalizado, puedes extender los tipos de expect de manera similar de la siguiente manera:

declare global {
namespace ExpectWebdriverIO {
interface AsymmetricMatchers {
myCustomMatcher(value: string): ExpectWebdriverIO.PartialMatcher;
}
}
}

Welcome! How can I help?

WebdriverIO AI Copilot