如何在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
相关产品推荐
相关产品推荐

