You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Maven嵌套Angular项目执行ng test测试时Chrome崩溃如何解决?

问题原因
  • 设备权限冲突:Windows环境下Chrome启动时默认会扫描本地USB、蓝牙设备,当系统存在设备驱动异常、权限限制时,会触发读取错误,严重时直接导致Chrome进程崩溃。
  • 未处理的原生弹窗阻塞:测试用例运行过程中弹出了You have been logged out but please close the window manually if you are on Chrome.的alert弹窗,Karma测试runner无法自动处理这类原生弹窗,会阻塞测试执行流程,最终触发Chrome进程超时崩溃。
  • 配置语义错误(非直接崩溃原因):pom.xml中对应执行步骤的id为npm run prod,但实际执行的参数是run test,配置语义不匹配容易引发后续维护错误。
解决方案
  • 改用Chrome无头模式运行测试,在Angular项目的karma.conf.js中新增自定义无头Chrome启动配置,禁用设备扫描相关特性,避免调用系统UI和硬件资源:
module.exports = function(config) {
  config.set({
    // 其他原有配置保持不变
    browsers: ['ChromeHeadlessNoSandbox'],
    customLaunchers: {
      ChromeHeadlessNoSandbox: {
        base: 'ChromeHeadless',
        flags: [
          '--no-sandbox', // 禁用沙箱模式,解决Windows权限问题
          '--disable-gpu', // 禁用GPU加速,减少资源依赖
          '--disable-dev-shm-usage', // 解决共享内存不足问题
          '--disable-usb-discovery', // 禁用USB设备扫描
          '--disable-bluetooth', // 禁用蓝牙设备扫描
          '--disable-device-discovery-notifications' // 禁用设备发现提示
        ]
      }
    }
  })
}
  • 自动拦截测试中的alert弹窗,在会触发alert的测试用例前添加拦截逻辑,避免阻塞测试流程:
// 放在测试用例触发alert的逻辑之前
spyOn(window, 'alert').and.stub();
  • 修正pom.xml配置,对齐执行id和实际运行逻辑,避免维护混淆:
<execution>
  <id>npm run test</id>
  <goals>
    <goal>npm</goal>
  </goals>
  <configuration>
    <arguments>run test</arguments>
  </configuration>
</execution>
  • 若上述方案仍未解决,可升级Chrome浏览器、ChromeDriver到最新稳定版,同时升级项目依赖中的karma-chrome-launcher版本,排除版本不兼容问题。

内容的提问来源于stack exchange,提问作者Walter White

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 09:45:02