Spec-Zone.ru › Cypress

focus

Фокусировка на элементе DOM.

Синтаксис

.focus()
.focus(options)

Использование

Правильное использование

cy.get('input').first().focus() // Focus on the first input

Неправильное использование

cy.focus('#search') // Errors, cannot be chained off 'cy'
cy.window().focus() // Errors, 'window' does not yield DOM element

Аргументы

options (Объект)

Передайте объект options, чтобы изменить поведение по умолчанию .focus().

Опция Значение по умолчанию Описание
log true Отображает команду в Журнале команд
timeout defaultCommandTimeout Время ожидания .focus() для разрешения перед истечением времени ожидания

Возвращаемое значение

  • .focus() возвращает тот же объект, который был передан из предыдущей команды.

Примеры

Без аргументов

Фокусировка на поле ввода

cy.get('[type="input"]').focus()

Фокусировка, ввод и разфокусировка текстового поля

// yields the <textarea> for further chaining
cy.get('textarea').focus().type('Nice Product!').blur()

Примечания

Действительность

Focus — это не команда действия

.focus() не реализована как другие команды действий и не подчиняется тем же правилам ожидания действительности.

.focus() — полезная команда, используемая как сокращение. Обычно у пользователя нет способа «сфокусироваться» на элементе без вызова другого действия или побочного эффекта. Как правило, пользователь должен нажать или табулировать этот элемент.

Часто использование .focus() непосредственно более лаконично и передает то, что вы пытаетесь проверить.

Если вам нужны другие гарантии ожидания, пока элемент станет активным, используйте другую команду, например, .click().

События разфокусировки

Cypress сначала разфокусирует другие элементы

Если в данный момент другой элемент DOM имеет фокус, Cypress отправляет событие blur этому элементу перед выполнением команды .focus().

Фокусируемый

Можно вызвать только для валидного фокусируемого элемента

Убедитесь, что элемент, на котором вы пытаетесь вызвать .focus() , является фокусируемым элементом.

Таймауты

Может произойти таймаут, так как ваш браузер не получил событий фокусировки

Если вы видите эту ошибку, возможно, вам нужно убедиться, что главное окно браузера имеет фокус. Это означает, что фокус не находится в отладчике или любом другом окне во время выполнения команды.

Внутри Cypress учитывается это, и при необходимости будет полифиллировать события разфокусировки, чтобы воспроизвести поведение браузера. К сожалению, браузер по-прежнему будет вести себя по-разному, если он не в фокусе — например, он может ограничивать асинхронные события. В этом случае лучше всего держать Cypress в фокусе при работе с тестом.

Правила

Требования

  • .focus() требует привязки к команде, которая возвращает элемент(ы) DOM.
  • .focus() требует, чтобы элемент мог получить фокус.

Утверждения

  • .focus() автоматически будет ждать, пока утверждения, которые вы привязали, пройдут

Таймауты

  • .focus() может приостановиться в ожидании прохождения утверждений, которые вы добавили.

Журнал команд

Фокусировка на текстовом поле

cy.get('[name="comment"]').focus()

Вышеуказанные команды будут отображены в Журнале команд как:

Command Log focus

При нажатии на команду focus в журнале команд консоль выводит следующее:

console.log focus

См. также

  • .blur()
  • .click()
  • cy.focused()
  • .type()

© 2017 Cypress.io
Licensed under the MIT License.
https://docs.cypress.io/api/commands/focus

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API