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()
Вышеуказанные команды будут отображены в Журнале команд как:
При нажатии на команду focus в журнале команд консоль выводит следующее:
См. также
© 2017 Cypress.io
Licensed under the MIT License.
https://docs.cypress.io/api/commands/focus