Можно ли отправить `postMessage` в приложение с Cypress? Как передать данные, которые будут получены через `postMessage`? - PullRequest
0 голосов
/ 19 июня 2019

Я создаю тесты Cypress e2e, однако наше приложение открывается как модальное (iframe) поверх родительской страницы. Поскольку Cypress не поддерживает фреймы, я решил попробовать запустить приложение "автономно". Однако при запуске приложение получает данные с родительской страницы через window.postMessage (информация о потоке и сеансе). Можно ли передать эти данные в приложение через Cypress?

Я пытался получить данные, которые мы получаем из бэкэнда через cy.request, и это решает проблему с данными сеанса, однако я все еще не могу понять, как передавать информацию о потоке.

Ответы [ 2 ]

0 голосов
/ 25 июня 2019

Вы можете отправить window.postMessage() в Cypress.Поскольку Cypress работает в браузере рядом с вашим приложением, он имеет доступ ко всем веб-API.

Чтобы получить ссылку на объект window вашего приложения, вы можете использовать cy.window()

Собрав все вместе, вы отправляете postMessage в тестируемое приложение:

cy.window() // get a reference to application's `window`
.then($window => {
  const message = 'some data here'
  $window.postMessage(message, '*')
})
0 голосов
/ 20 июня 2019

Отправка POST-форм при посещении страницы действительно возможна. Начиная с Cypress 3.2.0, вы можете отправлять POST-запросы, используя cy.visit.

Вы можете проверить cy.visit() документы для получения более подробной информации , но вот быстрый пример кода того, что вы пытаетесь сделать:

cy.visit({
  url: 'http://my-app.com/standalone-iframe-modal.html',
  method: 'POST',
  body: {
    formKey: 'some-value',
    anotherKey: 'some-other-value'
  }
})
...