Автоожидание
Введение
Playwright выполняет ряд проверок на возможность выполнения действий с элементами перед их выполнением, чтобы гарантировать, что эти действия будут работать как ожидается. Он автоматически ожидает, пока все соответствующие проверки не пройдут, и только затем выполняет запрашиваемое действие. Если необходимые проверки не проходят в течение заданного timeout
, действие завершается с ошибкой TimeoutError
.
Например, для locator.click() Playwright убедится, что:
- локатор разрешается в ровно один элемент
- элемент Видим
- элемент Стабилен, то есть не анимируется или завершил анимацию
- элемент Получает события, то есть не закрыт другими элементами
- элемент Включен
Вот полный список проверок на возможность выполнения действий для каждого действия:
Действие | Видим | Стабилен | Получает события | Включен | Редактируем |
---|---|---|---|---|---|
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, которая поддерживает его.
Получает события
Элемент считается получающим события указателя, когда он является целью события указателя в точке действия. Например, при клике в точке (10;10)
Playwright проверяет, не захватит ли какой-либо другой элемент (обычно это оверлей) клик в точке (10;10)
.
Например, рассмотрим сценарий, когда Playwright кликнет по кнопке Sign Up
независимо от того, когда был вызван locator.click():
- страница проверяет, уникально ли имя пользователя, и кнопка
Sign Up
отключена; - после проверки с сервером отключенная кнопка
Sign Up
заменяется на другую, которая теперь включена.