配置Selenium+Firefox时如何解决NoSuchSessionError错误?
解决MacOS下Node.js+Firefox Selenium的NoSuchSessionError问题
问题根源
你遇到的核心问题有两点:
- 下载了Windows版本的
geckodriver.exe,Mac系统需要对应架构的无后缀二进制驱动文件 - 测试脚本未处理Selenium的异步操作逻辑,导致会话还未建立就执行了
quit()
分步解决方案
1. 替换为适配Mac的Geckodriver
- 下载对应Mac架构的Geckodriver版本:
- M系列芯片:选择
mac-arm64架构的压缩包 - Intel芯片:选择
macos架构的压缩包
- M系列芯片:选择
- 解压后得到无
.exe后缀的geckodriver文件 - 打开终端给文件赋予执行权限:
chmod +x /path/to/your/geckodriver - 将驱动移至系统默认PATH目录(无需手动添加环境变量):
mv /path/to/your/geckodriver /usr/local/bin/
2. 修改脚本处理异步逻辑
Selenium的build()、get()、quit()均为异步操作,必须用async/await等待执行完成,否则会出现会话未初始化就关闭的问题。修改后的测试脚本:
const { Builder, Capabilities } = require('selenium-webdriver'); (async function runTest() { let driver; try { // 等待驱动会话建立 driver = await new Builder() .withCapabilities(Capabilities.firefox()) .build(); // 等待页面加载完成 await driver.get('http://www.lambdatest.com'); // 可选:添加延迟查看页面效果 await driver.sleep(2000); } catch (err) { console.error('测试出错:', err); } finally { // 确保驱动正常退出 if (driver) { await driver.quit(); } } })();
3. 利用Selenium Manager自动管理驱动(可选)
Selenium 4.x版本自带Selenium Manager工具,会自动检测浏览器版本并下载匹配的驱动,无需手动配置:
- 删除你手动下载的Geckodriver文件
- 直接运行修改后的脚本,Selenium会自动下载适配Firefox 104.0的驱动版本
内容的提问来源于stack exchange,提问作者MeltingDog
相关产品推荐
相关产品推荐

