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.
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
:
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:
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:
loading...
Esto te permite llamar a la aserción de la siguiente manera:
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:
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;
}
}
}