使用webdriver.io做自动化测试报404 invalid session id错误如何解决
报错触发原因
- 测试用例未适配异步执行逻辑:Webdriver.IO v7及以上版本默认启用异步执行模式,你提供的测试代码用了同步写法,所有browser API调用没有加await修饰,代码执行顺序混乱,测试用例可能在所有操作完成前就被判定结束,会话被提前销毁,后续操作请求就会返回无效会话错误。
- 会话空闲超时:测试代码中设置了
browser.pause(5000)的5秒等待,如果wdio配置中的会话空闲超时时间小于5秒,会话会被服务端主动销毁,后续的元素查找、断言操作就会触发404无效会话报错。 - 驱动/浏览器兼容性问题:使用的Webdriver驱动(如chromedriver)与本地浏览器版本不匹配,运行过程中驱动异常崩溃,导致对应会话失效。
- 浏览器进程异常退出:测试运行过程中浏览器被系统强制回收资源、崩溃,或者被手动关闭,都会直接导致会话失效。
修复方案
- 首先修改测试代码适配异步执行规则,给所有异步API加上async/await修饰,修改后代码如下:
describe("Main Page",()=>{ // 测试用例函数加async修饰 it("Verify List Items",async ()=>{ // 所有browser API调用前加await await browser.url("/"); await browser.pause(5000) // 元素查找API也需要加await const listExamples = await $$("//div[@id='content']//ul/li"); expect (listExamples).toBeElementsArrayOfSize(45); console.log(listExamples); }) })
- 调整wdio配置的超时参数:打开
wdio.conf.js,把idleTimeout参数调整为大于测试中最长等待时间的值,建议设置为10000(10秒)以上,避免会话被提前回收。 - 校验驱动版本一致性:确保安装的浏览器驱动版本和本地浏览器大版本完全匹配,比如Chrome 118就需要安装chromedriver@118版本的依赖。
- 排查浏览器运行异常:可以先关闭无头模式,用有头浏览器运行测试,观察运行过程中是否有浏览器崩溃、权限弹窗等异常问题,针对性处理。
内容的提问来源于stack exchange,提问作者Harshad BB
相关产品推荐
相关产品推荐

