Перейти к основному содержимому

Авто-ожидание

Введение

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

УтверждениеОписание
Expect(Locator).ToBeAttachedAsync()Элемент прикреплен
Expect(Locator).ToBeCheckedAsync()Флажок установлен
Expect(Locator).ToBeDisabledAsync()Элемент отключен
Expect(Locator).ToBeEditableAsync()Элемент редактируем
Expect(Locator).ToBeEmptyAsync()Контейнер пуст
Expect(Locator).ToBeEnabledAsync()Элемент включен
Expect(Locator).ToBeFocusedAsync()Элемент в фокусе
Expect(Locator).ToBeHiddenAsync()Элемент не виден
Expect(Locator).ToBeInViewportAsync()Элемент пересекается с областью просмотра
Expect(Locator).ToBeVisibleAsync()Элемент виден
Expect(Locator).ToContainTextAsync()Элемент содержит текст
Expect(Locator).ToHaveAttributeAsync()Элемент имеет DOM-атрибут
Expect(Locator).ToHaveClassAsync()Элемент имеет класс
Expect(Locator).ToHaveCountAsync()Список имеет точное количество дочерних элементов
Expect(Locator).ToHaveCSSAsync()Элемент имеет CSS-свойство
Expect(Locator).ToHaveIdAsync()Элемент имеет ID
Expect(Locator).ToHaveJSPropertyAsync()Элемент имеет JavaScript-свойство
Expect(Locator).ToHaveTextAsync()Элемент соответствует тексту
Expect(Locator).ToHaveValueAsync()Поле ввода имеет значение
Expect(Locator).ToHaveValuesAsync()Выбор имеет выбранные опции
Expect(Page).ToHaveTitleAsync()Страница имеет заголовок
Expect(Page).ToHaveURLAsync()Страница имеет URL
Expect(Response).ToBeOKAsync()Ответ имеет статус OK

Узнайте больше в руководстве по утверждениям.

Видим

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