【问题标题】:Cypress long automation script crashes the Chrome browser with Aw Snap Error赛普拉斯长自动化脚本使 Chrome 浏览器崩溃并出现 Aw Snap 错误
【发布时间】:2018-08-01 09:44:57
【问题描述】:

我在 cypress 中遇到浏览器崩溃问题。 我的自动化脚本过程有点长,因此在它运行了几个场景之后。每次尝试运行第三种情况时,浏览器都会崩溃并显示以下屏幕。

有时它会超时并抛出 440 未知代码错误。

如果我移动我的第一个场景,那么也是相同的行为。每次第 1 次和第 2 次都完美执行,但从第 3 次开始,所有测试都失败了。

有人遇到过类似的问题吗?

【问题讨论】:

    标签: typescript automation cypress


    【解决方案1】:

    Cypress 有两种运行模式:调试/开发模式,以cypress open 开头,以及测试运行模式,以cypress run 开头。

    cypress runcypress open 有一些关键区别。最明显的是cypress run 是无头的。它在后台启动一个 Electron 浏览器并执行所有测试。

    这不是唯一的区别。使用cypress open 运行时,赛普拉斯会定期拍摄 DOM 快照以进行调试,您可能已经知道了。这是使用what has been described 作为受控内存泄漏来实现的;如果您有一个使用 cypress open 运行时间过长的单个测试,内存将继续攀升,直到 Chrome 最终崩溃。


    如果您的测试在 cypress run 上运行良好,而在 cypress open 上运行良好,那么您的问题很可能是内存问题。如果是这种情况,您有两个选择可以提供帮助。

    首先,您可以减少保存在内存中的快照数量。您的赛普拉斯根文件夹中的 cypress.json 文件允许您为各种设置设置自定义值。 numTestsKeptInMemory 默认为 30,但您可以将其减少到 10、5 甚至 0。在 0 时,您将不会获得任何 DOM 快照。内存使用量仍会攀升,但会以更慢的速度攀升。

    {
        "numTestsKeptInMemory": 0
    }
    

    其次,您可以而且应该将一个大的测试文件拆分为多个较小的测试文件。从 3.0.0 版开始,Cypress runs each test file in its own render process。这允许赛普拉斯在每次测试后进行清理,只要您的单个文件足够小,就可以有效地解决内存问题。


    如果这些都不能解决您的问题,那么您可能正在处理另一个错误,例如this one。如果您在the Github tracker 上找不到您的问题,您可能需要考虑reporting it

    【讨论】:

    • 很好的解释!谢谢韦德。让我试试你给定的解决方案,很快就会回复你。
    • 嗨,韦德,请指导我如何执行 cypress run 命令。我试过“npm run cypress:run”,但它说缺少脚本。
    • 也尝试了“cypress run”,但它说 cypress 未被识别为内部或外部命令
    • 下面,cypress.json 中的更改目前对我有效。 { "numTestsKeptInMemory": 0 }
    • @PrashantKankhara 你是从 cypress.io 下载 Cypress,还是通过 NPM 安装的?
    猜你喜欢
    • 1970-01-01
    • 2021-12-21
    • 1970-01-01
    • 2020-09-13
    • 1970-01-01
    • 2023-02-12
    • 2019-01-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多