Benutzerdefinierte Matcher
WebdriverIO verwendet eine Jest-ähnliche expect
Assertion-Bibliothek, die mit speziellen Funktionen und benutzerdefinierten Matchern für Web- und Mobile-Tests ausgestattet ist. Obwohl die Bibliothek der Matcher umfangreich ist, passt sie sicherlich nicht zu allen möglichen Situationen. Daher ist es möglich, die vorhandenen Matcher mit eigenen benutzerdefinierten Matchern zu erweitern.
Obwohl es derzeit keinen Unterschied gibt, wie Matcher definiert werden, die spezifisch für das browser
Objekt oder eine element Instanz sind, könnte sich dies in Zukunft ändern. Behalten Sie webdriverio/expect-webdriverio#1408
im Auge für weitere Informationen zu dieser Entwicklung.
Benutzerdefinierte Browser-Matcher
Um einen benutzerdefinierten Browser-Matcher zu registrieren, rufen Sie extend
auf dem expect
Objekt entweder direkt in Ihrer Spec-Datei oder als Teil des z.B. before
Hooks in Ihrer wdio.conf.js
auf:
loading...
Wie im Beispiel gezeigt, nimmt die Matcher-Funktion das erwartete Objekt, z.B. das Browser- oder Element-Objekt, als ersten Parameter und den erwarteten Wert als zweiten. Sie können den Matcher dann wie folgt verwenden:
loading...
Benutzerdefinierte Element-Matcher
Ähnlich wie bei benutzerdefinierten Browser-Matchern unterscheiden sich Element-Matcher nicht. Hier ist ein Beispiel, wie man einen benutzerdefinierten Matcher erstellt, um das aria-label eines Elements zu überprüfen:
loading...
Dies ermöglicht es Ihnen, die Assertion wie folgt aufzurufen:
loading...
TypeScript-Unterstützung
Wenn Sie TypeScript verwenden, ist ein weiterer Schritt erforderlich, um die Typsicherheit Ihrer benutzerdefinierten Matcher zu gewährleisten. Durch die Erweiterung der Matcher
-Schnittstelle mit Ihren benutzerdefinierten Matchern verschwinden alle Typprobleme:
loading...
Wenn Sie einen benutzerdefinierten asymmetrischen Matcher erstellt haben, können Sie die expect
-Typen ähnlich wie folgt erweitern:
declare global {
namespace ExpectWebdriverIO {
interface AsymmetricMatchers {
myCustomMatcher(value: string): ExpectWebdriverIO.PartialMatcher;
}
}
}