【问题标题】:Cypress e2e test dock closing on cy.visit()赛普拉斯 e2e 测试码头在 cy.visit() 上关闭
【发布时间】:2019-07-12 00:34:12
【问题描述】:

我正在使用 Cypress 在 Angular Web 应用程序中进行 e2e 测试。当 cypress 首次打开时,它会转到 http://localhost:54401/__/#tests/integration/login.spec.ts

这会在屏幕左侧显示 cypress 测试扩展坞,在右侧显示 Web 输出。只要我的beforeEach 函数调用cy.visit(),屏幕顶部的主 url 不会更改输出,而是更改为: http://localhost:4200/__/#tests/integration/login.spec.ts

Angular 然后接管,它找不到 __ 路由,所以页面被重定向到我的默认页面,我失去了 Cypress 停靠/测试运行器。

赛普拉斯应该只是更改加载我的应用程序的框架,而不是页面 url。正在发生的事情导致赛普拉斯操纵主浏览器 url 而不是框架 url。

如何解决此问题,以便 cypress 以框架而不是主浏览器窗口为目标?这在过去有效,最近才开始无效。我不确定这是柏树还是铬问题。我认为这可能是赛普拉斯网络安全的问题,所以我尝试在cypress.json 中设置chromeWebSecurity: false 无济于事。 https://docs.cypress.io/guides/guides/web-security.html#Disabling-Web-Security

我使用的是 cypress 3.1.5。

【问题讨论】:

  • 我也有同样的问题(但 Vue 应用程序在端口 8080 上运行)。如果我切换到 Electron,测试就会运行,所以我一直在等待重新安装所有东西的时间。目前最好的猜测是由于从 chrome 自动升级。我正在使用 cypress v3.1.1、Chrome 72、Electron 59。

标签: angular google-chrome cypress


【解决方案1】:

向赛普拉斯 github 项目提交了一个错误,并被告知这通常发生在应用程序具有 framebusting 代码时。原来我们正在导入hammerjs。当我删除该导入(在 polyfills.js 中)时,它工作正常。

import 'hammerjs';

供参考,问题链接为Entire test runner redirects to app's login page #3517

【讨论】:

  • 由于hammerjs 用于触摸屏,我想知道支持触摸的应用程序是否是一个无法用赛普拉斯测试的类。
  • 为了它的价值,我从 node_modules 中删除了 hammerjs,并在 angular-cli.json:scripts 中对它的引用(我在 polyfill.ts 中没有引用)但问题仍然存在。
  • 我刚刚在一个新文件夹中进行了 Cypress 的全新安装,现在它正在工作,但我注意到 chrome 测试窗口仍将基本 url 从 http://localhost:64203/__/#/tests/integration\app.e2e.spec.js 切换到 http://localhost:4200/__/#/tests/integration\app.e2e.spec.js,所以假设这是预期的行为。全新安装后,应用程序仍保留在其框架中,与之前的安装一样,它将接管整个 chrome 窗口(然后是 404,因为路由无效)。
  • 我认为端口更改有望解决网络安全问题,如下所述:docs.cypress.io/guides/guides/…
  • 感谢您的参考。我觉得这些文档在有用之前还有很长的路要走。
【解决方案2】:

对我来说,从 3.1.0 升级到 3.1.5 解决了这个问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-12-12
    • 2021-10-28
    • 1970-01-01
    • 1970-01-01
    • 2021-10-29
    • 1970-01-01
    • 2018-11-02
    • 2023-02-14
    相关资源
    最近更新 更多