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

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

Введение

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

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

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

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

ДействиеВидимСтабиленПолучает событияВключенРедактируем
locator.check()ДаДаДаДа-
locator.click()ДаДаДаДа-
locator.dblclick()ДаДаДаДа-
locator.set_checked()ДаДаДаДа-
locator.tap()ДаДаДаДа-
locator.uncheck()ДаДаДаДа-
locator.hover()ДаДаДа--
locator.drag_to()ДаДаДа--
locator.screenshot()ДаДа---
locator.fill()Да--ДаДа
locator.clear()Да--ДаДа
locator.select_option()Да--Да-
locator.select_text()Да----
locator.scroll_into_view_if_needed()-Да---
locator.blur()-----
locator.dispatch_event()-----
locator.focus()-----
locator.press()-----
locator.press_sequentially()-----
locator.set_input_files()-----

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

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

Утверждения

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

УтверждениеОписание
expect(locator).to_be_attached()Элемент прикреплен
expect(locator).to_be_checked()Флажок установлен
expect(locator).to_be_disabled()Элемент отключен
expect(locator).to_be_editable()Элемент редактируем
expect(locator).to_be_empty()Контейнер пуст
expect(locator).to_be_enabled()Элемент включен
expect(locator).to_be_focused()Элемент в фокусе
expect(locator).to_be_hidden()Элемент не видим
expect(locator).to_be_in_viewport()Элемент пересекает область просмотра
expect(locator).to_be_visible()Элемент видим
expect(locator).to_contain_text()Элемент содержит текст
expect(locator).to_have_attribute()Элемент имеет DOM-атрибут
expect(locator).to_have_class()Элемент имеет класс
expect(locator).to_have_count()Список имеет точное количество дочерних элементов
expect(locator).to_have_css()Элемент имеет CSS-свойство
expect(locator).to_have_id()Элемент имеет ID
expect(locator).to_have_js_property()Элемент имеет JavaScript-свойство
expect(locator).to_have_text()Элемент соответствует тексту
expect(locator).to_have_value()Ввод имеет значение
expect(locator).to_have_values()Выбор имеет выбранные опции
expect(page).to_have_title()Страница имеет заголовок
expect(page).to_have_url()Страница имеет URL
expect(response).to_be_ok()Ответ имеет статус 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 заменяется на другую, которая теперь включена.