Das Element-Objekt
Ein Element-Objekt ist ein Objekt, das ein Element im Remote-User-Agent repräsentiert, z.B. ein DOM-Knoten bei der Ausführung einer Sitzung in einem Browser oder ein mobiles Element für Mobilgeräte. Es kann über einen der vielen Element-Abfragebefehle empfangen werden, z.B. $
, custom$
, react$
oder shadow$
.
Eigenschaften
Ein Element-Objekt hat folgende Eigenschaften:
Name | Typ | Details |
---|---|---|
sessionId | String | Vom Remote-Server zugewiesene Sitzungs-ID. |
elementId | String | Zugehörige Web-Element-Referenz, die verwendet werden kann, um mit dem Element auf Protokollebene zu interagieren |
selector | String | Selektor, der zur Abfrage des Elements verwendet wird. |
parent | Object | Entweder das Browser-Objekt, wenn das Element vom Browser abgerufen wurde (z.B. const elem = browser.$('selector') ) oder ein Element-Objekt, wenn es aus einem Element-Bereich abgerufen wurde (z.B. elem.$('selector') ) |
options | Object | WebdriverIO Optionen, abhängig davon, wie das Browser-Objekt erstellt wurde. Siehe weitere Setup-Typen. |
Methoden
Ein Element-Objekt stellt alle Methoden aus dem Protokollabschnitt bereit, z.B. WebDriver-Protokoll sowie Befehle, die im Element-Abschnitt aufgeführt sind. Verfügbare Protokollbefehle hängen vom Sitzungstyp ab. Wenn Sie eine automatisierte Browser-Sitzung ausführen, sind keine der Appium-Befehle verfügbar und umgekehrt.
Zusätzlich dazu sind folgende Befehle verfügbar:
Name | Parameter | Details |
---|---|---|
addCommand | - commandName (Typ: String )- fn (Typ: Function ) | Ermöglicht die Definition benutzerdefinierter Befehle, die vom Browser-Objekt für Kompositionszwecke aufgerufen werden können. Lesen Sie mehr im Leitfaden Benutzerdefinierte Befehle. |
overwriteCommand | - commandName (Typ: String )- fn (Typ: Function ) | Ermöglicht das Überschreiben eines beliebigen Browser-Befehls mit benutzerdefinierter Funktionalität. Verwenden Sie dies mit Vorsicht, da es Framework-Benutzer verwirren kann. Lesen Sie mehr im Leitfaden Benutzerdefinierte Befehle. |
Anmerkungen
Element-Kette
Bei der Arbeit mit Elementen bietet WebdriverIO eine spezielle Syntax, um deren Abfrage zu vereinfachen und komplexe verschachtelte Element-Lookups zu erstellen. Da Element-Objekte es ermöglichen, Elemente innerhalb ihres Zweigs mit gängigen Abfragemethoden zu finden, können Benutzer verschachtelte Elemente wie folgt abrufen:
const header = await $('#header')
const headline = await header.$('#headline')
console.log(await headline.getText()) // gibt "I am a headline" aus
Bei tief verschachtelten Strukturen kann die Zuweisung verschachtelter Elemente zu einem Array, um es dann zu verwenden, ziemlich umständlich sein. Daher hat WebdriverIO das Konzept der verketteten Element-Abfragen, die das Abrufen verschachtelter Elemente wie folgt ermöglichen:
console.log(await $('#header').$('#headline').getText())
Dies funktioniert auch beim Abrufen einer Reihe von Elementen, z.B.:
// den Text der 3. Überschrift innerhalb des 2. Headers abrufen
console.log(await $$('#header')[1].$$('#headline')[2].getText())
Bei der Arbeit mit einer Reihe von Elementen kann dies besonders nützlich sein, wenn Sie mit ihnen interagieren möchten. Anstatt also:
const elems = await $$('div')
const locations = await Promise.all(
elems.map((el) => el.getLocation())
)
Können Sie Array-Methoden direkt in der Element-Kette aufrufen, z.B.:
const location = await $$('div').map((el) => el.getLocation())
oder:
const divs = await $$('div')
const location = await divs.map((el) => el.getLocation())
WebdriverIO verwendet eine benutzerdefinierte Implementierung, die asynchrone Iteratoren unter der Haube unterstützt, sodass alle Befehle aus ihrer API auch für diese Anwendungsfälle unterstützt werden.
Hinweis: Alle asynchronen Iteratoren geben ein Promise zurück, auch wenn Ihr Callback keines zurückgibt, z.B.:
const divs = await $$('div')
console.log(divs.map((div) => div.selector)) // ❌ gibt "Promise<string>[]" zurück
console.log(await divs.map((div) => div.selector)) // ✅ gibt "string[]" zurück
Benutzerdefinierte Befehle
Sie können benutzerdefinierte Befehle im Browser-Bereich festlegen, um häufig verwendete Arbeitsabläufe zu abstrahieren. Schauen Sie sich unseren Leitfaden zu Benutzerdefinierten Befehlen für weitere Informationen an.