JavaScript+Selenium测试NW.js应用启动报错求助:SessionNotCreatedError
解决NW.js exe应用的Selenium自动化连接问题
你遇到的SessionNotCreatedError核心原因是NW.js未开启DevTools调试端口,导致ChromeDriver无法建立有效连接。以下是具体修复方案:
关键配置要点
- 版本严格匹配:ChromeDriver版本必须与NW.js内置的Chromium版本完全一致(可通过NW.js官方文档查询对应版本,下载匹配的ChromeDriver)
- 强制开启调试端口:启动NW.js时必须指定调试端口参数,让ChromeDriver能识别并连接
- 路径绝对化:NW.exe的路径建议使用绝对路径,避免相对路径引发的识别错误
修复后的完整脚本
require('chromedriver'); const { Builder, By } = require('selenium-webdriver'); const chrome = require('selenium-webdriver/chrome'); async function testNwApp() { const options = new chrome.Options(); // 指定NW.exe的绝对路径,替换为你实际的路径 options.setChromeBinaryPath('C:/your-project-path/dist/src/nw.exe'); // 添加NW.js启动参数:开启调试端口、禁用沙箱(Windows环境必填) options.addArguments('--remote-debugging-port=9222'); options.addArguments('--no-sandbox'); options.addArguments('--disable-gpu'); // 可选,规避GPU相关兼容性问题 let driver; try { driver = await new Builder() .forBrowser('chrome') .setChromeOptions(options) .build(); // 等待NW应用完全加载,时间可根据应用复杂度调整 await driver.sleep(2000); // 定位输入框并执行输入操作 const inputElement = await driver.findElement(By.id("input")); await inputElement.sendKeys("San Francisco"); } catch (err) { console.error('测试执行失败:', err); } finally { if (driver) { await driver.sleep(1000); await driver.quit(); } } } testNwApp();
额外注意事项
- 打包后的NW应用需确保
package.json的main字段正确指向src/views/index.html,保证应用启动后自动加载目标页面 - 若出现端口占用提示,可更换
--remote-debugging-port的端口号(如9223) - Windows环境下若遇到权限问题,尝试以管理员身份运行脚本
内容的提问来源于stack exchange,提问作者codemuke
相关产品推荐
相关产品推荐

