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

标签 browser automated-tests e2e-testing cypress

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

我试图通过 cy.request 获取我们从后端接收的数据,它解决了 session 数据的问题,但我仍然无法弄清楚如何传递有关流的信息。

最佳答案

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

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

综合起来,这就是您向被测应用程序发送 postMessage 的方式:

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

关于browser - 是否可以使用 Cypress 将 `postMessage` 发送到应用程序?如何传递通过 `postMessage` 接收的数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56662776/

相关文章:

javascript - 如何在 testcafe 脚本中添加递归函数检查 xhr 响应?

javascript - 如何使用 cypress [cypress] 选择文本

javascript - Internet Explorer 10 和 top.window.pageYOffset

selenium - 如何复制浏览器崩溃以进行自动化测试

testing - 从 Fixture 传递到 TESTS 的测试 Controller

python - 如果在 Python 中引发并处理异常,测试用例会失败?

c# - Selenium webdriver 测试 100% 在本地通过,100% 在 VSTS 服务器上失败

javascript - javascript 和同源策略混淆

基本小程序的 Java 安全漏洞

android - Browser.EXTRA_APPLICATION_ID 在 ICS 中不起作用