Cypress执行测试时Chromium渲染进程崩溃问题求助
Cypress执行测试时Chromium渲染进程崩溃(Fatal JavaScript invalid size error)的解决办法
问题描述
执行cypress run执行单个登录测试时,遇到以下报错:
We detected that the Chromium Renderer process just crashed.
Fatal JavaScript invalid size error 169220804 #FailureMessage Object: Electron Framework v8::internal::SetupIsolateDelegate::SetupHeap(v8::internal::Heap*) + 16184648
已尝试场景:
- 切换Chrome、Electron浏览器
- 在Windows 11、MacOS Monterey系统测试
- 使用
--headless模式 - 更换Node.js 14/16、Cypress 9.7/10.7.0版本
问题特征:仅项目主页面测试时崩溃,登录成功加载主页面几秒后触发;直接用Chrome访问主页面无异常,测试其他网页正常,疑似页面加载时内存压力导致。
解决办法
1. 增大Node.js内存限制
通过NODE_OPTIONS环境变量调整V8堆内存上限,缓解内存溢出问题:
NODE_OPTIONS="--max-old-space-size=4096" cypress run
(数值可根据机器配置调整,比如8192代表8GB)
2. 调整Cypress配置项
修改cypress.config.js(旧版本用cypress.json),禁用可能触发冲突的特性:
module.exports = defineConfig({ e2e: { // 关闭Chrome安全策略,避免资源加载限制 chromeWebSecurity: false, // 禁用实验性会话特性(若开启过) experimentalSessionAndOrigin: false, // 延长命令超时,给页面足够加载时间 defaultCommandTimeout: 15000, // 配置浏览器启动参数,禁用沙箱和GPU加速 browserLaunchOptions: { electron: { args: ['--no-sandbox', '--disable-gpu'] }, chrome: { args: ['--no-sandbox', '--disable-gpu'] } } } });
3. 优化测试逻辑
避免页面未完全加载时执行断言,优先等待核心元素渲染完成:
// 登录操作 cy.get('#username').type('test-user'); cy.get('#password').type('test-pass'); cy.get('#login-btn').click(); // 等待主页面核心元素出现,而非直接检查URL cy.get('#main-dashboard').should('be.visible'); // 再验证URL cy.url().should('include', '/dashboard');
4. 排查页面加载资源差异
在测试中添加日志监控,对比Cypress环境与正常浏览器的资源加载差异:
cy.visit('/dashboard', { onBeforeLoad(win) { // 监听控制台错误和警告 cy.stub(win.console, 'error').as('consoleError'); cy.stub(win.console, 'warn').as('consoleWarn'); }, onLoad(win) { // 打印捕获到的日志 cy.get('@consoleError').then(errors => { console.log('Page load errors:', errors); }); cy.get('@consoleWarn').then(warnings => { console.log('Page load warnings:', warnings); }); } });
重点关注是否有重复加载的脚本、内存泄漏的代码片段。
5. 调整依赖版本
- 尝试升级Cypress至11.x或降级至8.x版本,避开10.x的兼容性问题
- 测试Node.js 18版本(需确认项目依赖兼容)
- 移除Cypress第三方插件(如自定义报告、拦截器),排查是否为插件冲突导致
内容的提问来源于stack exchange,提问作者Corgu1995
相关产品推荐
相关产品推荐

