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

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

Введение

Playwright выполняет ряд проверок на возможность выполнения действий с элементами перед их выполнением, чтобы гарантировать, что эти действия будут работать как ожидается. Он автоматически ожидает, пока все соответствующие проверки не пройдут, и только затем выполняет запрашиваемое действие. Если необходимые проверки не проходят в течение заданного timeout, действие завершается с ошибкой TimeoutError.

Например, для Locator.click() Playwright убедится, что:

  • локатор разрешается в ровно один элемент
  • элемент Видим
  • элемент Стабилен, то есть не анимируется или завершил анимацию
  • элемент Получает события, то есть не перекрыт другими элементами
  • элемент Включен

Вот полный список проверок на возможность выполнения действий для каждого действия:

ДействиеВидимСтабиленПолучает событияВключенРедактируем
Locator.check()ДаДаДаДа-
Locator.click()ДаДаДаДа-
Locator.dblclick()ДаДаДаДа-
Locator.setChecked()ДаДаДаДа-
Locator.tap()ДаДаДаДа-
Locator.uncheck()ДаДаДаДа-
Locator.hover()ДаДаДа--
Locator.dragTo()ДаДаДа--
Locator.screenshot()ДаДа---
Locator.fill()Да--ДаДа
Locator.clear()Да--ДаДа
Locator.selectOption()Да--Да-
Locator.selectText()Да----
Locator.scrollIntoViewIfNeeded()-Да---
Locator.blur()-----
Locator.dispatchEvent()-----
Locator.focus()-----
Locator.press()-----
Locator.pressSequentially()-----
Locator.setInputFiles()-----

Принудительное выполнение действий

Некоторые действия, такие как Locator.click(), поддерживают опцию force, которая отключает несущественные проверки на возможность выполнения действий. Например, передача истинного значения force в метод Locator.click() не будет проверять, что целевой элемент действительно получает события клика.

Утверждения

Playwright включает в себя утверждения с автоматическим повтором, которые устраняют нестабильность, ожидая, пока условие не будет выполнено, аналогично автоожиданию перед действиями.

УтверждениеОписание
assertThat(locator).isAttached()Элемент прикреплен
assertThat(locator).isChecked()Флажок установлен
assertThat(locator).isDisabled()Элемент отключен
assertThat(locator).isEditable()Элемент редактируем
assertThat(locator).isEmpty()Контейнер пуст
assertThat(locator).isEnabled()Элемент включен
assertThat(locator).isFocused()Элемент в фокусе
assertThat(locator).isHidden()Элемент не видим
assertThat(locator).isInViewport()Элемент пересекается с областью просмотра
assertThat(locator).isVisible()Элемент видим
assertThat(locator).containsText()Элемент содержит текст
assertThat(locator).hasAttribute()Элемент имеет DOM-атрибут
assertThat(locator).hasClass()Элемент имеет класс
assertThat(locator).hasCount()Список имеет точное количество дочерних элементов
assertThat(locator).hasCSS()Элемент имеет CSS-свойство
assertThat(locator).hasId()Элемент имеет ID
assertThat(locator).hasJSProperty()Элемент имеет JavaScript-свойство
assertThat(locator).hasText()Элемент соответствует тексту
assertThat(locator).hasValue()Ввод имеет значение
assertThat(locator).hasValues()Выбор имеет выбранные опции
assertThat(page).hasTitle()Страница имеет заголовок
assertThat(page).hasURL()Страница имеет URL
assertThat(response).isOK()Ответ имеет статус 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.click():

  • страница проверяет, что имя пользователя уникально, и кнопка Sign Up отключена;
  • после проверки с сервером отключенная кнопка Sign Up заменяется на другую, которая теперь включена.