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

Selenium+Spectron运行Electron测试报Chrome启动失败DevToolsActivePort错误

Selenium+Spectron Electron自动化测试启动失败修复方案

问题场景

使用Selenium搭配Spectron开展Electron应用自动化测试,已添加--headless、--no-sandbox、--disable-dev-shm-usage等常规启动参数,执行测试时仍抛出Chrome启动失败、DevToolsActivePort文件不存在的报错。

原测试代码

const webdriver = require('selenium-webdriver');
var Application = require('spectron').Application;
var assert = require('assert');

const driver = new webdriver.Builder()
    // 9515为chrome driver默认监听端口
    .usingServer('http://localhost:9515')
    .withCapabilities({
        'goog:chromeOptions': {
            // 原配置指向系统Chrome二进制路径
            binary: 'C:/Program Files/Google/Chrome/Application/chrome.exe',
        },
    })
    .forBrowser('electron') // selenium-webdriver <=3.6.0版本需指定浏览器为electron
    .build();

describe('Application launch', function () {
    var app;
    jest.setTimeout(30000);
    beforeEach(function () {
        app = new Application({
            path: 'node_modules/.bin/electron',
            args: ['--headless', '--no-sandbox', '--disable-dev-shm-usage'],
        });
        return app.start();
    });

    afterEach(function () {
        if (app && app.isRunning()) {
            return app.stop();
        }
    });

    it('click a button', function* () {
        yield driver.sleep(5000);
    });
});

原始报错信息

yarn run v1.22.19
warning package.json: License should be a valid SPDX license expression
warning ..\..\..\package.json: No license field
$ jest --NODE_ENV=test
 FAIL  src/__test__/App.spec.jsx (10.623 s)
  Application launch
    × click a button (6564 ms)

  ● Application launch › click a button

    Failed to create session.
    unknown error: Chrome failed to start: was killed.
      (unknown error: DevToolsActivePort file doesn't exist)
      (The process started from chrome location C:\Users\vipul\appname\src\node_modules\spectron\lib\launcher.bat is no longer running, so ChromeDriver is assuming that Chrome has crashed.)

      at startWebDriverSession (src/node_modules/webdriver/build/utils.js:72:15)
      at Function.newSession (src/node_modules/webdriver/build/index.js:58:45)
      at Object.remote (src/node_modules/webdriverio/build/index.js:73:22)

Test Suites: 1 failed, 1 total
Tests:       1 failed, 1 total
Snapshots:   0 total
Time:        11.878 s
Ran all test suites.
error Command failed with exit code 1.

根因分析与修复步骤

报错核心是代码逻辑冲突、配置错误导致Electron进程启动后立刻退出,ChromeDriver无法连接到调试端口,按以下步骤逐一排查修复:

  • 移除冗余的手动Selenium Driver初始化逻辑:代码中手动创建的webdriver.Builder实例与Spectron的Application启动逻辑完全冲突,Spectron本身会自动拉起版本匹配的ChromeDriver、管理会话连接,不需要手动指定9515端口服务,也不需要单独构建driver实例。原代码中手动配置的binary指向系统安装的Chrome浏览器,并非Electron二进制,是启动失败的核心诱因之一。
  • 修正Windows环境下的Electron路径配置:原代码中path字段填写的node_modules/.bin/electron是npm生成的启动脚本(即报错中提到的launcher.bat),并非实际的Electron可执行文件,需要将路径改为node_modules/electron/dist/electron.exe,直接指向真实二进制,避免拉起脚本进程后立刻退出被ChromeDriver判定为崩溃。
  • 补全Windows无头模式必填启动参数:Windows环境下无头运行Electron/Chrome仅加三个基础参数不够,需要补充--disable-gpu、--remote-debugging-port=9222、--window-size=1280,720参数,解决GPU进程异常、调试端口未正常初始化导致的DevToolsActivePort file doesn't exist报错。同时args中需要添加自身Electron应用的主入口文件路径,否则Electron启动后会因无加载目标直接退出。
  • 校验版本匹配关系:确认本地安装的Spectron版本与Electron版本严格对应,版本错位会导致内置ChromeDriver与Electron集成的Chrome版本不兼容,启动即崩溃。
  • 排查路径与权限问题:如果项目路径包含中文、特殊字符,或者运行测试的终端没有项目目录读写权限,也会导致进程被系统拦截杀死,可将项目移动到纯英文无特殊字符的路径下,以管理员权限启动终端执行测试验证。

修复后可运行示例代码

var Application = require('spectron').Application;
var assert = require('assert');

describe('Application launch', function () {
    var app;
    jest.setTimeout(30000);
    beforeEach(function () {
        app = new Application({
            // Windows下直接指向dist目录内的真实electron可执行文件
            path: 'node_modules/electron/dist/electron.exe',
            args: [
                '--headless',
                '--no-sandbox',
                '--disable-dev-shm-usage',
                '--disable-gpu',
                '--remote-debugging-port=9222',
                '--window-size=1280,720',
                // 替换为自身项目的Electron主进程入口路径
                './main.js'
            ],
            startTimeout: 10000
        });
        return app.start();
    });

    afterEach(function () {
        if (app && app.isRunning()) {
            return app.stop();
        }
    });

    it('click a button', async function () {
        // 直接通过Spectron内置的app.client调用webdriverio接口操作页面
        await app.client.pause(5000);
        // 后续页面交互逻辑(如按钮点击)直接基于app.client实现即可
    });
});

内容的提问来源于stack exchange,提问作者Vipul Learning

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 00:06:34