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

如何在WebdriverIO中为每个测试用例关闭浏览器并结束会话?

解决WebdriverIO中每个测试用例(it块)前后启动/关闭浏览器的问题

问题分析

你当前的报错源于使用了WebdriverIO中已废弃或错误的方法:

  • browser.end()/browser.close():WebdriverIO v7及以上版本已移除这两个方法,无法通过它们结束浏览器会话
  • browser.closewindows():存在拼写错误,正确方法是browser.closeWindow(),但该方法仅关闭当前窗口,不会销毁整个浏览器会话,因此后续测试会出现"No session found"的报错

正确实现方案

要实现每个it块执行前打开浏览器、执行后关闭浏览器的需求,按以下步骤调整配置:

1. 修正wdio.conf.js中的钩子函数

替换错误的会话结束方法,使用WebdriverIO官方推荐的deleteSession(),同时保留测试前的初始化逻辑:

beforeTest: async function (test, context) {
    // 每个测试用例执行前,打开目标页面并最大化窗口
    await browser.url("/");
    await browser.maximizeWindow();
},
afterTest: async function (test, context, { error, result, duration, passed, retries }) {
    // 销毁当前浏览器会话,彻底关闭浏览器进程
    await browser.deleteSession();
}

2. 启用单测试用例独立会话模式

在wdio.conf.js的capabilities配置中添加sessionPerTest: true,强制为每个测试用例创建独立的浏览器会话:

capabilities: [{
    browserName: 'chrome',
    'goog:chromeOptions': {
        // 可根据需求添加无头模式等配置
        args: ['--headless', '--disable-gpu']
    },
    // 关键配置:确保每个测试用例使用全新会话
    sessionPerTest: true
}],

额外注意事项

  • 若你使用的是WebdriverIO v6及更早版本,browser.end()是有效方法,但建议升级到最新版本使用deleteSession()
  • 测试用例中的logout()操作不会影响会话销毁逻辑,可正常保留
  • 若仍出现会话丢失报错,检查是否有其他钩子函数(如afterHook)提前销毁了会话

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 17:40:17