window
Получить объект window текущей активной страницы.
Синтаксис
cy.window()
cy.window(options)
Использование
Правильное использование
cy.window()
Аргументы
options (Объект)
Передайте объект options, чтобы изменить поведение по умолчанию cy.window().
| Опция | Значение по умолчанию | Описание |
|---|---|---|
log |
true |
Отображает команду в Журнале команд |
timeout |
defaultCommandTimeout |
Время ожидания разрешения cy.window() перед исчерпанием времени ожидания
|
Возвращаемое значение
-
cy.window()'возвращает объектwindow'
Примеры
Без аргументов
Возвращение объекта удаленного окна
cy.visit('http://localhost:8080/app')
cy.window().then((win) => {
// win is the remote window
// of the page at: http://localhost:8080/app
})
Проверка пользовательского свойства
Если приложение устанавливает пользовательское свойство, например:
window.tags = {
foo: 'bar',
}
Наш тест может подтвердить, что свойство было правильно установлено.
cy.window().its('tags.foo').should('equal', 'bar')
Примечание: Команды Cypress асинхронны, поэтому вы не можете проверить значение свойства до выполнения команд Cypress.
it('equals bar', () => {
let foo
cy.window().then((win) => {
foo = win.foo
})
// variable "foo" is still undefined
// because the above "then" callback
// has not been executed yet
expect(foo).to.equal('bar') // test fails
})
Вместо этого используйте cy.then() обратный вызов для проверки значения.
it('equals bar', () => {
let foo
cy.window()
.then((win) => {
foo = win.foo
})
.then(() => {
// variable "foo" has been set
expect(foo).to.equal('bar') // test passes
})
})
Начало тестов после готовности приложения
Если для запуска приложения требуется некоторое время, оно может «сигнализировать» о готовности, установив свойство, которое Cypress может ожидать.
// app.js
// only set property "appReady" if Cypress is running tests
if (window.Cypress) {
window.appReady = true
}
Cypress Test Runner может ожидать, что свойство window.appReady будет true перед каждым тестом
// spec.js
beforeEach(() => {
cy.visit('/')
cy.window().should('have.property', 'appReady', true)
})
Когда можно начать тест?
Эта запись блога объясняет, как использовать
cy.window()для отслеживания DOMprototypeдля определения момента, когда приложение начинает добавлять обработчики событий к элементам DOM. Когда это происходит в первый раз, Test Runner понимает, что приложение запущено, и тесты могут начаться.См. Установить флаг для запуска тестов для дополнительных примеров.
Опции
Передача таймаута утверждению .should()
cy.window({ timeout: 10000 }).should('have.property', 'foo')
Примечания
Cypress использует 2 разных окна.
Допустим, вы хотите проверить тип событий. Вы можете написать код, как показано ниже:
it('test', (done) => {
cy.get('#test-input').then((jQueryElement) => {
let elemHtml = jQueryElement.get(0)
elemHtml.addEventListener('keydown', (event) => {
expect(event instanceof KeyboardEvent).to.be.true
done()
})
})
cy.get('#test-input').type('A')
})
Он завершается ошибкой. Но интересный момент заключается в том, что тип event равен KeyboardEvent при console.log(event).
Это происходит потому, что Test Runner использует iframe для загрузки тестируемого приложения. Другими словами, KeyboardEvent, используемый в приведенном выше коде, и класс KeyboardEvent, из которого создается переменная event — это разные KeyboardEvent.
Поэтому тест должен быть написан так.
it('should trigger KeyboardEvent with .type inside Cypress event listener', (done) => {
cy.window().then((win) => {
cy.get('#test-input').then((jQueryElement) => {
let elemHtml = jQueryElement.get(0)
elemHtml.addEventListener('keydown', (event) => {
expect(event instanceof win['KeyboardEvent']).to.be.true
done()
})
})
})
cy.get('#test-input').type('A')
})
Правила
Требования
-
cy.window()требует привязки кcy.
Утверждения
-
cy.window()будет автоматически повторяться до тех пор, пока все цепочные утверждения не пройдут
Таймауты
-
cy.window()может завершиться ожиданием утверждений, которые вы добавили, прежде чем они пройдут.
Журнал команд
Получить окно
cy.window()
Приведённые выше команды будут отображаться в Журнале команд как:
При нажатии на window в журнале команд, консоль выведет следующее:
История
| Версия | Изменения |
|---|---|
| 0.20.0 | Можно вызвать .focus() и .blur() на cy.window()
|
| 0.11.6 |
cy.window() записывается в Журнал команд |
См. также
© 2017 Cypress.io
Licensed under the MIT License.
https://docs.cypress.io/api/commands/window