Автоожидание
Введение
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
заменяется на другую, которая теперь включена.