В WebdriverIO проверка видимости элементов является одной из базовых задач автоматизации тестирования. Она позволяет убедиться, что элементы интерфейса присутствуют на странице и доступны для взаимодействия, что критично для корректного выполнения сценариев тестирования.
WebdriverIO предоставляет несколько ключевых методов для работы с видимостью элементов:
isDisplayed() Возвращает булево
значение: true, если элемент видим на странице, и
false, если элемент скрыт или отсутствует. Пример
использования:
const button = await $('#submit-button');
const visible = await button.isDisplayed();
console.log(visible); // true или falseisDisplayedInViewport() Проверяет,
видим ли элемент в текущей области видимости окна браузера. Это важно
для элементов, которые могут быть на странице, но не в зоне видимости
без прокрутки.
const banner = await $('#top-banner');
const inViewport = await banner.isDisplayedInViewport();waitForDisplayed() Позволяет
ожидать появления элемента в DOM и его видимости в течение указанного
времени. Метод полезен для асинхронных операций и динамически
загружаемых элементов.
const loginForm = await $('#login-form');
await loginForm.waitForDisplayed({ timeout: 5000 });WebdriverIO позволяет гибко управлять ожиданиями и проверками видимости через опции методов. Основные параметры:
timeout — максимальное время ожидания, в
миллисекундах.reverse — если установить true, метод
будет ожидать исчезновения элемента.timeoutMsg — пользовательское сообщение об ошибке, если
элемент не достиг нужного состояния.Пример проверки исчезновения элемента:
const loader = await $('#loading-spinner');
await loader.waitForDisplayed({ timeout: 10000, reverse: true, timeoutMsg: 'Spinner не исчез после 10 секунд' });
Часто необходимо проверять видимость элемента в сочетании с другими условиями, например, активностью кнопки или содержимым текста. Для этого применяются цепочки промисов и логические конструкции:
const submitButton = await $('#submit-button');
if (await submitButton.isDisplayed() && await submitButton.isEnabled()) {
await submitButton.click();
} else {
console.warn('Кнопка недоступна для нажатия');
}
Корректная проверка видимости невозможна без точного выбора элемента. WebdriverIO поддерживает различные типы селекторов:
$('#id'),
$('.class'), $('div > p:first-child')$('//button[text()="Submit"]')browser.$ или $$ для массивов элементовВажно понимать, что методы проверки видимости работают только с
существующими элементами DOM. Попытка вызвать
isDisplayed() на несуществующем элементе вызовет
исключение. Для безопасной работы можно предварительно использовать
метод isExisting().
Многие веб-страницы используют динамическую подгрузку контента,
поэтому проверка видимости требует ожидания. Методы
waitForDisplayed и waitUntil позволяют
синхронизировать тест с состоянием страницы:
await browser.waitUntil(
async () => await $('#dynamic-content').isDisplayed(),
{
timeout: 7000,
timeoutMsg: 'Динамический контент не появился'
}
);
waitForDisplayed вместо простых
isDisplayed при работе с динамическими
элементами.pause), так как они снижают производительность и
могут вызывать нестабильность.isEnabled) или состояния атрибутов для точной
имитации действий пользователя.const menu = await $('#menu');
await menu.waitForDisplayed({ timeout: 5000 });
await menu.click();
const notification = await $('#notification');
await notification.waitForDisplayed({ reverse: true, timeout: 3000 });
const message = await $('#success-message');
if (await message.isDisplayed()) {
const text = await message.getText();
console.log('Сообщение:', text);
}
Понимание и правильное использование методов проверки видимости элементов обеспечивает стабильность и предсказуемость автоматизированных тестов, позволяя работать с динамическими и сложными интерфейсами современных веб-приложений.