Chrome 107.x版本下Node.js+Selenium进程异常无法终止问题求助
排查Chrome 107.x + Selenium WebDriver 异步执行异常问题
首先你提供的测试代码存在明显语法错误:console.log("HELLO);缺失闭合引号,先修正这个基础问题,避免因代码解析失败引发异常。
针对升级后出现的异步代码执行紊乱、进程挂起无报错问题,从以下方向逐一排查:
1. 版本兼容性校验
- 确保Chrome浏览器与ChromeDriver的版本完全匹配(比如Chrome 107.0.5304.87需对应ChromeDriver 107.0.5304.62,小版本尽量对齐)
- Selenium WebDriver 4.5.0对Chrome 107的适配存在已知问题,建议升级到Selenium 4.6.0及以上版本(该版本开始内置ChromeDriver自动管理功能,可自动匹配浏览器版本,减少兼容性冲突)
2. 完善异步代码的错误捕获
进程挂起大概率是某个await操作抛出异常但未被捕获,导致Promise一直处于pending状态。修改代码添加错误捕获逻辑:
it("Test code", async function(){ try { console.log("START"); await driver.sleep(3000); console.log("HELLO"); // 修正引号缺失问题 // 确保XPath变量正确定义为By.xpath格式,而非纯字符串 const targetElement = await driver.findElement(By.xpath("你的XPath表达式")); await targetElement.sendKeys("TEXT"); console.log("STOP"); } catch (err) { console.error("测试执行异常:", err); throw err; // 抛出异常让Mocha捕获,避免进程无响应挂起 } })
注意:findElement的参数必须是By.xpath("具体路径")格式,直接传入字符串会导致静默失败。
3. 修正Mocha超时配置
Mocha默认异步测试超时为2000ms,driver.sleep(3000)已经超出默认限制,若超时设置无效,可在测试块内直接指定:
it("Test code", async function(){ this.timeout(10000); // 设置超时为10秒 // 测试代码... })
或在Mocha启动命令中添加参数:mocha file1.js --timeout 10000
4. 优化ChromeDriver启动参数
升级Chrome后,部分默认启动参数可能导致驱动无响应,尝试添加以下参数:
const { Builder } = require('selenium-webdriver'); const chrome = require('selenium-webdriver/chrome'); const chromeOptions = new chrome.Options(); chromeOptions.addArguments('--no-sandbox'); chromeOptions.addArguments('--disable-dev-shm-usage'); chromeOptions.addArguments('--disable-gpu'); // 适配无头模式或Linux环境 chromeOptions.addArguments('--remote-debugging-port=9222'); // 启用远程调试,便于排查驱动状态 const driver = new Builder() .forBrowser('chrome') .setChromeOptions(chromeOptions) .build();
5. 检查selenium-standalone服务状态
若使用selenium-standalone管理驱动,确保服务启动正常且无版本冲突。可尝试停止selenium-standalone服务,直接使用ChromeDriver驱动(Selenium 4+支持直接调用驱动,无需启动独立服务)。
内容的提问来源于stack exchange,提问作者Nilesh
相关产品推荐
相关产品推荐

