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

Nightwatch 2.0中无新命令传入时如何延长会话超时时间

问题原因

执行无浏览器交互的自定义等待逻辑时,没有任何WebDriver命令发送到浏览器会话,触发了Nightwatch的空闲会话自动回收机制,会话被提前终止,就会出现浏览器自动关闭、后续页面操作失效的问题。

超时配置项说明

该场景对应的超时配置官方名称为 sessionIdleTimeout,单位为毫秒,默认值为90000(即1.5分钟),作用为设置无新命令发送到浏览器时,会话的最长存活时间。

配置方法
  • 全局配置:在项目的Nightwatch配置文件(通常为根目录下的nightwatch.conf.js/nightwatch.conf.ts)中,对应运行环境的test_settings节点下修改参数值即可,示例:
module.exports = {
  // 其他全局配置...
  test_settings: {
    default: {
      // 其他环境配置...
      sessionIdleTimeout: 300000 // 可根据后台作业最长执行时间调整,示例为5分钟
    }
  }
}
  • 单用例临时配置:如果不需要全局修改,也可以在单个测试用例/测试钩子中直接给当前会话设置超时值:
test(browser) {
  browser.globals.sessionIdleTimeout = 300000;
  // 后续测试逻辑...
}
更优实践

不建议无限制调大空闲超时时间,更合理的做法是用Nightwatch内置的browser.waitUntil()方法封装后台作业的等待逻辑,既可以自定义轮询检查作业状态的规则,也能让Nightwatch感知到异步流程的执行状态,自动维持会话活跃,避免触发空闲回收。对应给出的示例代码,改造后写法如下:

before(browser) {
  const loginPage = browser.page.login();
  loginPage.login(user, pass);
}

test(browser) {
  const simulate = browser.page.simulate();
  const targetPage = browser.page.target();
  simulate.startJob();

  // 内置waitUntil包裹等待逻辑
  browser.waitUntil(async () => {
    // 此处写入检查后台作业是否完成的逻辑,比如调用业务接口查询作业状态
    const isCompleted = await waitUntilJobCompleted();
    return isCompleted;
  }, 300000, '后台作业等待超时', 5000); // 分别对应:等待超时时间、超时提示、轮询间隔

  // 后续页面操作可正常执行,不会出现浏览器提前关闭问题
  targetPage.doSomething();
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 21:54:32