В WebdriverIO для взаимодействия с элементами страницы и извлечения
их содержимого используется метод
getText(). Он позволяет получить видимый
текст элемента, находящегося на веб-странице, и часто применяется в
проверках контента, сравнении ожидаемых и фактических значений, а также
при динамическом тестировании интерфейса.
const text = await $(selector).getText();
$(selector) — функция для поиска
одного элемента по CSS-селектору, XPath или другим стратегиям
поиска.getText() — асинхронный метод,
возвращающий строку с текстовым содержимым элемента.Пример:
const heading = await $('h1');
const headingText = await heading.getText();
console.log(headingText); // Выведет текст заголовка <h1>
Если требуется получить текст у группы элементов, используется
$$, возвращающий массив элементов:
const items = await $$('ul li');
const texts = await Promise.all(items.map(item => item.getText()));
console.log(texts); // Массив текстов всех <li>
Использование Promise.all обеспечивает асинхронное
выполнение всех вызовов getText() одновременно, что
ускоряет обработку больших списков элементов.
getValue()Метод getText() возвращает видимый текст
элемента, в то время как
getValue() возвращает значение атрибута
value, что важно для полей ввода:
const inputValue = await $('#username').getValue();
getText() игнорирует скрытые значения и HTML-теги внутри
элемента, извлекая только видимый контент.
WebdriverIO поддерживает ожидание элементов перед получением текста, что критично при работе с динамическими веб-страницами:
const button = await $('#loadButton');
await button.waitForDisplayed({ timeout: 5000 });
const buttonText = await button.getText();
Параметр timeout позволяет задать максимальное время
ожидания появления элемента на странице. Если элемент не отобразился,
будет выброшена ошибка.
Иногда необходимо получить текст только внутри дочернего элемента или исключить текст соседних блоков:
const parent = await $('.parent');
const childText = await parent.$('.child').getText();
getText() не извлекает содержимое скрытых дочерних
элементов (display: none) и обычно возвращает текст в том
виде, как он отображается пользователю.
Текст, получаемый через getText(), может содержать
переносы строк и лишние пробелы. Для унификации часто применяется метод
trim():
const text = (await $('#element').getText()).trim();
Для многострочного текста рекомендуется использовать регулярные выражения для проверки содержимого:
const text = await $('#element').getText();
if (/Ошибка \d{3}/.test(text)) {
console.log('Сообщение об ошибке найдено');
}
Метод getText() часто применяется совместно с
библиотекой expect-webdriverio для проверок:
const text = await $('#message').getText();
await expect(text).toBe('Успешно выполнено');
Также возможна проверка вхождения текста:
await expect($('#alert')).toHaveTextContaining('Ошибка');
getText() для скрытых элементов, так
как это может привести к непредсказуемым результатам.$$ вместе с
Promise.all.waitUntil
или встроенные методы ожидания (waitForDisplayed,
waitForExist) перед вызовом getText().const notifications = await $$('.notification');
const visibleTexts = await Promise.all(
notifications
.filter(async el => await el.isDisplayed())
.map(el => el.getText())
);
console.log(visibleTexts);
Этот подход позволяет получить только текст видимых уведомлений, игнорируя скрытые элементы и ускоряя обработку данных.
Получение текста элемента является базовым, но критически важным навыком для создания стабильных и точных тестов в WebdriverIO. Тщательная обработка динамических элементов, пробелов и асинхронности гарантирует надежность проверок и корректное взаимодействие с пользовательским интерфейсом.