Перейти к основному содержимому

Объект Элемента

Объект Элемента - это объект, представляющий элемент в удаленном пользовательском агенте, например, DOM-узел при выполнении сессии в браузере или мобильный элемент для мобильных устройств. Его можно получить с помощью одной из множества команд запроса элементов, например, $, custom$, react$ или shadow$.

Свойства

Объект элемента имеет следующие свойства:

ИмяТипДетали
sessionIdStringИдентификатор сессии, назначенный удаленным сервером.
elementIdStringСвязанная ссылка на веб-элемент, которую можно использовать для взаимодействия с элементом на уровне протокола
selectorStringСелектор, используемый для запроса элемента.
parentObjectЛибо Объект Браузера, когда элемент был получен из него (например, const elem = browser.$('selector')), либо Объект Элемента, если он был получен из области элемента (например, elem.$('selector'))
optionsObjectОпции WebdriverIO в зависимости от того, как был создан объект браузера. Подробнее в типах настройки.

Методы

Объект элемента предоставляет все методы из раздела протокола, например, протокол WebDriver, а также команды, перечисленные в разделе элементов. Доступные команды протокола зависят от типа сессии. Если вы запускаете автоматизированную сессию браузера, ни одна из команд Appium commands не будет доступна, и наоборот.

Кроме того, доступны следующие команды:

ИмяПараметрыДетали
addCommand- commandName (Тип: String)
- fn (Тип: Function)
Позволяет определять пользовательские команды, которые можно вызывать из объекта браузера для целей композиции. Подробнее в руководстве по Пользовательским Командам.
overwriteCommand- commandName (Тип: String)
- fn (Тип: Function)
Позволяет переопределить любую команду браузера пользовательской функциональностью. Используйте осторожно, так как это может запутать пользователей фреймворка. Подробнее в руководстве по Пользовательским Командам.

Примечания

Цепочка Элементов

При работе с элементами WebdriverIO предоставляет специальный синтаксис для упрощения их запроса и создания сложных вложенных поисков элементов. Поскольку объекты элементов позволяют вам находить элементы в их ветви дерева с помощью общих методов запроса, пользователи могут получать вложенные элементы следующим образом:

const header = await $('#header')
const headline = await header.$('#headline')
console.log(await headline.getText()) // выводит "I am a headline"

При глубоко вложенных структурах назначение любого вложенного элемента в массив для последующего использования может быть довольно многословным. Поэтому в WebdriverIO существует концепция цепочек запросов элементов, которая позволяет получать вложенные элементы таким образом:

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

Это также работает при получении набора элементов, например:

// получить текст 3-го заголовка внутри 2-го хедера
console.log(await $$('#header')[1].$$('#headline')[2].getText())

При работе с набором элементов это может быть особенно полезно при попытке взаимодействия с ними, поэтому вместо:

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

Вы можете напрямую вызывать методы массива в цепочке элементов, например:

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

то же самое, что и:

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

WebdriverIO использует собственную реализацию, которая под капотом поддерживает асинхронные итераторы, поэтому все команды из их API также поддерживаются для этих случаев использования.

Примечание: все асинхронные итераторы возвращают обещание, даже если ваш обратный вызов не возвращает его, например:

const divs = await $$('div')
console.log(divs.map((div) => div.selector)) // ❌ возвращает "Promise<string>[]"
console.log(await divs.map((div) => div.selector)) // ✅ возвращает "string[]"

Пользовательские Команды

Вы можете установить пользовательские команды в области браузера для абстрагирования часто используемых рабочих процессов. Ознакомьтесь с нашим руководством по Пользовательским Командам для получения дополнительной информации.

Welcome! How can I help?

WebdriverIO AI Copilot