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
相关产品推荐
相关产品推荐

