Авто-ожидание
Введение
Playwright выполняет ряд проверок доступности элементов перед выполнением действий, чтобы гарантировать, что эти действия ведут себя ожидаемым образом. Он автоматически ожидает, пока все соответствующие проверки не пройдут, и только затем выполняет запрашиваемое действие. Если необходимые проверки не проходят в течение заданного timeout
, действие завершается с ошибкой TimeoutError
.
Например, для Locator.ClickAsync() Playwright убедится, что:
- локатор разрешается в ровно один элемент
- элемент Видим
- элемент Стабилен, то есть не анимируется или завершил анимацию
- элемент Получает события, то есть не закрыт другими элементами
- элемент Включен
Вот полный список проверок доступности, выполняемых для каждого действия:
Действие | Видим | Стабилен | Получает события | Включен | Редактируем |
---|---|---|---|---|---|
Locator.CheckAsync() | Да | Да | Да | Да | - |
Locator.ClickAsync() | Да | Да | Да | Да | - |
Locator.DblClickAsync() | Да | Да | Да | Да | - |
Locator.SetCheckedAsync() | Да | Да | Да | Да | - |
Locator.TapAsync() | Да | Да | Да | Да | - |
Locator.UncheckAsync() | Да | Да | Да | Да | - |
Locator.HoverAsync() | Да | Да | Да | - | - |
Locator.DragToAsync() | Да | Да | Да | - | - |
Locator.ScreenshotAsync() | Да | Да | - | - | - |
Locator.FillAsync() | Да | - | - | Да | Да |
Locator.ClearAsync() | Да | - | - | Да | Да |
Locator.SelectOptionAsync() | Да | - | - | Да | - |
Locator.SelectTextAsync() | Да | - | - | - | - |
Locator.ScrollIntoViewIfNeededAsync() | - | Да | - | - | - |
Locator.BlurAsync() | - | - | - | - | - |
Locator.DispatchEventAsync() | - | - | - | - | - |
Locator.FocusAsync() | - | - | - | - | - |
Locator.PressAsync() | - | - | - | - | - |
Locator.PressSequentiallyAsync() | - | - | - | - | - |
Locator.SetInputFilesAsync() | - | - | - | - | - |
Принудительные действия
Некоторые действия, такие как Locator.ClickAsync(), поддерживают опцию force
, которая отключает несущественные проверки доступности. Например, передача истинного значения force
в метод Locator.ClickAsync() не будет проверять, что целевой элемент действительно получает события клика.
Утверждения
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.ClickAsync():
- страница проверяет, уникально ли имя пользователя, и кнопка
Sign Up
отключена; - после проверки с сервером отключенная кнопка
Sign Up
заменяется на другую, которая теперь включена.