Zum Hauptinhalt springen

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.

Warnung

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:

customMatchers/example.ts
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:

customMatchers/example.ts
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:

customMatchers/example.ts
loading...

Dies ermöglicht es Ihnen, die Assertion wie folgt aufzurufen:

customMatchers/example.ts
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:

customMatchers/example.ts
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;
}
}
}

Welcome! How can I help?

WebdriverIO AI Copilot