Spec-Zone.ru › Cypress

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() для отслеживания DOM prototype для определения момента, когда приложение начинает добавлять обработчики событий к элементам 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()

Приведённые выше команды будут отображаться в Журнале команд как:

Command Log window

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

Console Log window

История

Версия Изменения
0.20.0 Можно вызвать .focus() и .blur() на cy.window()
0.11.6 cy.window() записывается в Журнал команд

См. также

  • cy.visit()
  • cy.document()
  • cy.its()
  • Добавление пользовательских свойств в глобальный window с правильным типом TypeScript
  • Установить флаг для запуска тестов

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

Spec-Zone.ru

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