Автоожидание
Введение
Playwright выполняет ряд проверок на возможность выполнения действий с элементами перед их выполнением, чтобы гарантировать, что эти действия будут выполнены ожидаемым образом. Он автоматически ожидает, пока все соответствующие проверки не пройдут, и только затем выполняет запрашиваемое действие. Если необходимые проверки не проходят в течение заданного timeout, действие завершается с ошибкой TimeoutError.
Например, для locator.click(), Playwright убедится, что:
- локатор разрешается в ровно один элемент
- элемент Видим
- элемент Стабилен, то есть не анимируется или завершил анимацию
- элемент Получает события, то есть не закрыт другими элементами
- элемент Включен
Вот полный список проверок на возможность выполнения действий для каждого действия:
| Действие | Видим | Стабилен | Получает события | Включен | Редактируем |
|---|---|---|---|---|---|
| locator.check() | Да | Да | Да | Да | - |
| locator.click() | Да | Да | Да | Да | - |
| locator.dblclick() | Да | Да | Да | Да | - |
| locator.set_checked() | Да | Да | Да | Да | - |
| locator.tap() | Да | Да | Да | Да | - |
| locator.uncheck() | Да | Да | Да | Да | - |
| locator.hover() | Да | Да | Да | - | - |
| locator.drag_to() | Да | Да | Да | - | - |
| locator.screenshot() | Да | Да | - | - | - |
| locator.fill() | Да | - | - | Да | Да |
| locator.clear() | Да | - | - | Да | Да |
| locator.select_option() | Да | - | - | Да | - |
| locator.select_text() | Да | - | - | - | - |
| locator.scroll_into_view_if_needed() | - | Да | - | - | - |
| locator.blur() | - | - | - | - | - |
| locator.dispatch_event() | - | - | - | - | - |
| locator.focus() | - | - | - | - | - |
| locator.press() | - | - | - | - | - |
| locator.press_sequentially() | - | - | - | - | - |
| locator.set_input_files() | - | - | - | - | - |
Принудительное выполнение действий
Некоторые действия, такие как 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заменяется на другую, которая теперь включена.