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

Selenium×Node.js自动化测试遇NoSuchSessionError报错求助

问题分析与解决方案

嗨,我看了你的代码和报错信息,核心问题出在异步操作的执行顺序上!

你写的代码里,browser.get() 和 getTitle() 都是返回Promise的异步操作,但你在发起这些异步请求后,立刻就调用了 browser.close() 和 browser.quit()——这会导致浏览器会话在页面请求还没完成、标题还没获取到的时候就被关闭了,后面的Promise回调执行时自然就找不到会话,抛出NoSuchSessionError。

修正方案1:用Promise链保证顺序

把关闭浏览器的操作放到Promise链的最后,确保所有异步任务完成后再结束会话:

// Initialization of WebDriver
const webdriver = require('selenium-webdriver');

// Browser selection
const browser = new webdriver.Builder().forBrowser('chrome').build();

// Get page title
browser.get('http://example.selenium.jp/reserveApp/')
  .then(() => browser.getTitle())
  .then(title => console.log('Page title:', title))
  .finally(() => {
    // 所有任务完成后关闭并退出浏览器
    browser.close();
    browser.quit();
  })
  .catch(err => {
    // 捕获并处理错误
    console.error('Error occurred:', err);
    browser.quit(); // 出错也要确保浏览器退出
  });

修正方案2:用async/await(更简洁易读)

Node.js 8+支持async/await,用这个写法能让异步代码看起来像同步代码,更容易维护:

const webdriver = require('selenium-webdriver');

async function runTest() {
  let browser;
  try {
    // 初始化浏览器
    browser = new webdriver.Builder().forBrowser('chrome').build();
    // 打开页面
    await browser.get('http://example.selenium.jp/reserveApp/');
    // 获取标题
    const title = await browser.getTitle();
    console.log('Page title:', title);
  } catch (err) {
    console.error('Test failed:', err);
  } finally {
    // 无论成功失败都关闭浏览器
    if (browser) {
      await browser.close();
      await browser.quit();
    }
  }
}

// 执行测试
runTest();

额外小提示

另外,注意你的ChromeDriver版本(2.38)和Chrome浏览器版本要匹配,如果Chrome已经更新到较新版本,可能需要升级ChromeDriver来避免兼容性问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 06:45:36