是否可以使用 Cypress 将“postMessage”发送到应用程序?如何传递通过“postMessage”接收的数据?

Tor*_*nto 4 browser automated-tests e2e-testing cypress

我正在创建 Cypress e2e 测试,但是我们的应用程序在父页面顶部作为模式(iframe)打开。由于 Cypress 不支持 iframe,我决定尝试“独立”运行应用程序。window.postMessage然而,在启动应用程序时,通过(有关流程和会话的信息)从父页面获取数据。是否可以通过 Cypress 将这些数据传递给应用程序?

我尝试通过 cy.request 获取从后端接收的数据,它解决了会话数据的问题,但是我仍然不知道如何传递有关流的信息。

Zac*_*ist 9

您可以在 Cypress 发送window.postMessage()。由于 Cypress 在您的应用程序旁边的浏览器中运行,因此它可以访问所有 Web API。

为了获取对window应用程序对象的引用,您可以使用cy.window()

将所有内容放在一起,这就是将 a 发送postMessage到测试中的应用程序的方式:

cy.window() // get a reference to application's `window`
.then($window => {
  const message = 'some data here'
  $window.postMessage(message, '*')
})
Run Code Online (Sandbox Code Playgroud)