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