Przejdź do głównej treści

Obiekt Element

Obiekt Element to obiekt reprezentujący element na zdalnym agencie użytkownika, np. węzeł DOM podczas uruchamiania sesji w przeglądarce lub element mobilny dla urządzeń mobilnych. Można go otrzymać za pomocą jednego z wielu poleceń zapytania o element, np. $, custom$, react$ lub shadow$.

Właściwości

Obiekt elementu ma następujące właściwości:

NazwaTypSzczegóły
sessionIdStringIdentyfikator sesji przypisany przez zdalny serwer.
elementIdStringPowiązane odniesienie do elementu webowego, które może być używane do interakcji z elementem na poziomie protokołu
selectorStringSelektor używany do zapytania o element.
parentObjectAlbo Obiekt Przeglądarki, gdy element został pobrany z niej (np. const elem = browser.$('selector')) lub Obiekt Element, jeśli został pobrany z zakresu elementu (np. elem.$('selector'))
optionsObjectOpcje WebdriverIO zależne od sposobu utworzenia obiektu przeglądarki. Zobacz więcej typów konfiguracji.

Metody

Obiekt elementu udostępnia wszystkie metody z sekcji protokołu, np. protokół WebDriver, a także polecenia wymienione w sekcji elementu. Dostępne polecenia protokołu zależą od typu sesji. Jeśli uruchamiasz zautomatyzowaną sesję przeglądarki, żadne z poleceń Appium commands nie będą dostępne i odwrotnie.

Dodatkowo dostępne są następujące polecenia:

NazwaParametrySzczegóły
addCommand- commandName (Typ: String)
- fn (Typ: Function)
Pozwala na definiowanie niestandardowych poleceń, które mogą być wywoływane z obiektu przeglądarki w celach kompozycyjnych. Przeczytaj więcej w przewodniku Własne Polecenia.
overwriteCommand- commandName (Typ: String)
- fn (Typ: Function)
Pozwala na nadpisanie dowolnego polecenia przeglądarki niestandardową funkcjonalnością. Używaj ostrożnie, ponieważ może to dezorientować użytkowników frameworka. Przeczytaj więcej w przewodniku Własne Polecenia.

Uwagi

Łańcuch Elementów

Podczas pracy z elementami WebdriverIO zapewnia specjalną składnię, która upraszcza zapytania o nie i tworzy złożone, zagnieżdżone wyszukiwania elementów. Ponieważ obiekty elementów pozwalają znaleźć elementy w ich gałęzi drzewa za pomocą typowych metod zapytań, użytkownicy mogą pobierać zagnieżdżone elementy w następujący sposób:

const header = await $('#header')
const headline = await header.$('#headline')
console.log(await headline.getText()) // outputs "I am a headline"

W przypadku głęboko zagnieżdżonych struktur, przypisywanie każdego zagnieżdżonego elementu do tablicy, aby następnie go używać, może być dość rozwlekłe. Dlatego WebdriverIO ma koncepcję łańcuchowych zapytań o elementy, które pozwalają na pobieranie zagnieżdżonych elementów w taki sposób:

console.log(await $('#header').$('#headline').getText())

Działa to również podczas pobierania zestawu elementów, np.:

// get the text of the 3rd headline within the 2nd header
console.log(await $$('#header')[1].$$('#headline')[2].getText())

Podczas pracy z zestawem elementów może to być szczególnie przydatne, gdy próbujesz z nimi wchodzić w interakcję, zamiast robić:

const elems = await $$('div')
const locations = await Promise.all(
elems.map((el) => el.getLocation())
)

Możesz bezpośrednio wywołać metody Array na łańcuchu elementów, np.:

const location = await $$('div').map((el) => el.getLocation())

tak samo jak:

const divs = await $$('div')
const location = await divs.map((el) => el.getLocation())

WebdriverIO używa niestandardowej implementacji, która obsługuje asynchroniczne iteratory pod maską, więc wszystkie polecenia z ich API są również obsługiwane w tych przypadkach.

Uwaga: wszystkie asynchroniczne iteratory zwracają obietnicę, nawet jeśli twój callback nie zwraca obietnicy, np.:

const divs = await $$('div')
console.log(divs.map((div) => div.selector)) // ❌ zwraca "Promise<string>[]"
console.log(await divs.map((div) => div.selector)) // ✅ zwraca "string[]"

Własne Polecenia

Możesz ustawić niestandardowe polecenia w zakresie przeglądarki, aby uprościć często używane przepływy pracy. Sprawdź nasz przewodnik na temat Własnych Poleceń, aby uzyskać więcej informacji.

Welcome! How can I help?

WebdriverIO AI Copilot