Проверка доступности элементов является одной из ключевых задач автоматизированного тестирования интерфейсов. Playwright предоставляет мощные инструменты для определения видимости, состояния и интерактивности элементов на странице. Важность этой проверки заключается в том, что тесты должны оперировать с элементами только тогда, когда они доступны для взаимодействия, что предотвращает ошибки во время выполнения сценариев.
Метод isVisible() позволяет определить, отображается ли
элемент на странице. Под видимостью подразумевается не
только наличие элемента в DOM, но и его реальная видимость для
пользователя: элемент не скрыт стилями, не находится за
пределами видимой области и не имеет прозрачности 0.
const button = page.locator('#submit');
const visible = await button.isVisible();
if (visible) {
await button.click();
}
Особенности:
true, если элемент видим.false, если элемент скрыт через CSS
(display: none, visibility: hidden) или не
существует в DOM.count() или locator() — элемент может быть в
DOM, но невидим.Метод count() или проверка через locator()
позволяет определить, присутствует ли элемент в DOM, независимо от его
видимости.
const items = page.locator('.menu-item');
const itemCount = await items.count();
console.log(`Найдено элементов: ${itemCount}`);
Важно: наличие элемента в DOM не гарантирует его доступность для
взаимодействия. Часто используется вместе с isVisible() для
комплексной проверки.
Метод isEnabled() проверяет, можно ли взаимодействовать
с элементом (например, кнопкой или полем ввода).
const submitButton = page.locator('#submit');
if (await submitButton.isEnabled()) {
await submitButton.click();
}
Характерные моменты:
<input>, <button>,
<select> проверяется атрибут
disabled.true, если
атрибут disabled отсутствует.isVisible() позволяет убедиться, что
элемент готов к взаимодействию.Для элементов формы, таких как чекбоксы и радио-кнопки, важна
проверка состояния checked.
const checkbox = page.locator('#accept-terms');
const isChecked = await checkbox.isChecked();
if (!isChecked) {
await checkbox.check();
}
Особенности:
isChecked() возвращает true, если элемент
выбран.check() и uncheck() автоматически
выполняют клик только если состояние нужно изменить, предотвращая лишние
действия.Playwright поддерживает ожидания, что особенно важно
для динамических страниц с асинхронной загрузкой данных. Методы
waitForSelector() и встроенные опции locator()
позволяют дождаться доступности элемента:
await page.waitForSelector('#username', { state: 'visible', timeout: 5000 });
await page.fill('#username', 'admin');
Возможные состояния:
attached — элемент добавлен в DOM.detached — элемент удалён из DOM.visible — элемент отображается.hidden — элемент скрыт.Для подтверждения интерактивности элементов нередко требуется проверка текста или атрибутов:
const submitButton = page.locator('#submit');
const text = await submitButton.textContent();
const ariaDisabled = await submitButton.getAttribute('aria-disabled');
if (text === 'Отправить' && ariaDisabled !== 'true') {
await submitButton.click();
}
textContent() возвращает текст внутри элемента.getAttribute() позволяет проверить ARIA-атрибуты и
другие свойства, влияющие на доступность.Для надежной автоматизации проверку доступности элементов стоит комбинировать:
const loginButton = page.locator('#login');
if (await loginButton.isVisible() && await loginButton.isEnabled()) {
await loginButton.click();
}
Такой подход гарантирует, что клик произойдет только по видимому и активному элементу, что минимизирует риск ошибок в тестах.
waitForSelector()
и встроенные таймауты locator() помогают дождаться
появления элемента.isVisible() и визуальный скриншот.isEnabled() и атрибуты disabled /
readonly.Element is not attached to the DOM.setTimeout() — повышает стабильность тестов.isVisible(), isEnabled(),
isChecked()) для надежной автоматизации.Проверка доступности элементов в Playwright — фундаментальный навык для построения устойчивых, точных и безопасных тестов пользовательских интерфейсов. Она позволяет гарантировать взаимодействие только с готовыми элементами, обеспечивая корректное поведение сценариев и снижение числа ошибок.