Автоожидание
Введение
Playwright выполняет ряд проверок на возможность выполнения действий с элементами перед их выполнением, чтобы гарантировать, что эти действия будут работать как ожидается. Он автоматически ожидает, пока все соответствующие проверки не пройдут, и только затем выполняет запрашиваемое действие. Если необходимые проверки не проходят в течение заданного timeout, действие завершается с ошибкой TimeoutError.
Например, для locator.click() Playwright убедится, что:
- локатор соответствует ровно одному элементу
- элемент Visible (видим)
- элемент Stable (стабилен), то есть не анимируется или его анимация завершена
- элемент Receives Events (получает события), то есть не перекрыт другими элементами
- элемент Enabled (доступен для взаимодействия)
- элемент Not Inert (не является инертным)
Вот полный список проверок на возможность выполнения действий для каждого действия:
| Действие | Видимый | Стабильный | Получает события | Включён | Редактируемый | Не инертный |
|---|---|---|---|---|---|---|
| locator.check() | Да | Да | Да | Да | - | Да |
| locator.click() | Да | Да | Да | Да | - | Да |
| locator.dblclick() | Да | Да | Да | Да | - | Да |
| locator.setChecked() | Да | Да | Да | Да | - | Да |
| locator.tap() | Да | Да | Да | Да | - | Да |
| locator.uncheck() | Да | Да | Да | Да | - | Да |
| locator.hover() | Да | Да | Да | - | - | - |
| locator.dragTo() | Да | Да | Да | - | - | - |
| locator.screenshot() | Да | Да | - | - | - | - |
| locator.fill() | Да | - | - | Да | Да | Да |
| locator.clear() | Да | - | - | Да | Да | Да |
| locator.selectOption() | Да | - | - | Да | - | Да |
| locator.selectText() | Да | - | - | - | - | - |
| locator.scrollIntoViewIfNeeded() | - | Да | - | - | - | - |
| locator.blur() | - | - | - | - | - | - |
| locator.dispatchEvent() | - | - | - | - | - | - |
| locator.focus() | - | - | - | - | - | - |
| locator.press() | - | - | - | - | - | - |
| locator.pressSequentially() | - | - | - | - | - | - |
| locator.setInputFiles() | - | - | - | - | - | - |
Принудительное выполнение действий
Некоторые действия, такие как locator.click(), поддерживают опцию force, которая отключает несущественные проверки на возможность выполнения действий. Например, передача истинного значения force в метод locator.click() не будет проверять, что целевой элемент действительно получает события клика.
Утверждения
Playwright включает в себя автоматическое повторное выполнение утверждений, которые устраняют нестабильность, ожидая, пока условие не будет выполнено, аналогично автоожиданию перед действиями.
Узнайте больше в руководстве по утверждениям.
Видим
Элемент считается видимым, когда у него есть непустая ограничивающая рамка и он не имеет вычисленного стиля visibility:hidden.
Обратите внимание, что согласно этому определению:
- Элементы нулевого размера не считаются видимыми.
- Элементы с
display:noneне считаются видимыми. - Элементы с
opacity:0считаются видимыми.
Стабилен
Элемент считается стабильным, когда он сохраняет одну и ту же ограничивающую рамку в течение как минимум двух последовательных кадров анимации.
Включен
Элемент считается включенным, когда он не отключен.
Элемент отключен, когда:
- это
<button>,<select>,<input>,<textarea>,<option>или<optgroup>с атрибутом[disabled]; - это
<button>,<select>,<input>,<textarea>,<option>или<optgroup>, который является частью<fieldset>с атрибутом[disabled]; - это потомок элемента с атрибутом
[aria-disabled=true].
Редактируем
Элемент считается редактируемым, когда он [включен] и не является только для чтения.
Элемент только для чтения, когда:
- это
<select>,<input>или<textarea>с атрибутом[readonly]; - у него есть атрибут
[aria-readonly=true]и роль aria, которая поддерживает его.
Не инертен
Элемент считается неинертным, когда он не является частью инертного поддерева. Инертные элементы не могут получать фокус, на них нельзя нажимать или взаимодействовать с ними каким-либо другим способом.
Элемент является инертным, когда:
- это элемент с атрибутом
inertили потомок такого элемента.
Получает события
Элемент считается получающим события указателя, когда он является целью события указателя в точке действия. Например, при клике в точке (10;10) Playwright проверяет, не захватит ли какой-либо другой элемент (обычно это оверлей) клик в точке (10;10).
Например, рассмотрим сценарий, когда Playwright кликнет по кнопке Sign Up независимо от того, когда был вызван locator.click():
- страница проверяет, уникально ли имя пользователя, и кнопка
Sign Upотключена; - после проверки с сервером отключенная кнопка
Sign Upзаменяется на другую, которая теперь включена.