Skip to main content

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

Введение

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

УтверждениеОписание
expect(locator).toBeAttached()Элемент прикреплен
expect(locator).toBeChecked()Флажок установлен
expect(locator).toBeDisabled()Элемент отключен
expect(locator).toBeEditable()Элемент редактируем
expect(locator).toBeEmpty()Контейнер пуст
expect(locator).toBeEnabled()Элемент включен
expect(locator).toBeFocused()Элемент в фокусе
expect(locator).toBeHidden()Элемент не виден
expect(locator).toBeInViewport()Элемент пересекает область просмотра
expect(locator).toBeVisible()Элемент виден
expect(locator).toContainText()Элемент содержит текст
expect(locator).toHaveAttribute()Элемент имеет DOM-атрибут
expect(locator).toHaveClass()Элемент имеет класс
expect(locator).toHaveCount()Список имеет точное количество дочерних элементов
expect(locator).toHaveCSS()Элемент имеет CSS-свойство
expect(locator).toHaveId()Элемент имеет ID
expect(locator).toHaveJSProperty()Элемент имеет JavaScript-свойство
expect(locator).toHaveText()Элемент соответствует тексту
expect(locator).toHaveValue()Поле ввода имеет значение
expect(locator).toHaveValues()В списке выбраны опции
expect(page).toHaveTitle()Страница имеет заголовок
expect(page).toHaveURL()Страница имеет URL
expect(response).toBeOK()Ответ имеет статус 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 заменяется на другую, которая теперь включена.