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

WebdriverIO关闭弹窗后焦点未返回浏览器 执行中断报错问题

WebdriverIO自动化测试弹窗关闭后流程中断、内存溢出问题

复现场景

测试执行流程如下:

  • 登录页输入正确的用户名、密码
  • 点击提交按钮,等待页面弹出弹窗后,在弹窗输入框录入指定数据,点击弹窗OK按钮
  • 弹窗自动关闭,页面触发跳转加载全新页面
  • 预期执行:校验新页面上的指定业务元素

故障现象

  • 流程执行到第3步(弹窗关闭)后停滞,无法定位新页面上的任何元素
  • 已尝试的修复手段均无效:主动获取切换浏览器句柄、添加waitUntil显式等待逻辑、调用browser.getUrl()获取当前页面地址
  • 停滞一段时间后控制台抛出JavaScript heap out of memory内存溢出错误
  • 调试阶段捕获明确异常:Session closed/target window is already closed,未定位到异常触发点

环境信息

  • Node.js 版本:12.x
  • 自动化测试框架:WebdriverIO 6.4.0
  • 测试浏览器:Chrome 100.0.4896

根因与修复方案

  • 高概率根因:版本兼容性不匹配
    • WebdriverIO 6.4.0发布周期适配的Chrome最高版本为89及以下,当前使用的Chrome 100版本与WDIO6内置的ChromeDriver、WebDriver协议实现存在兼容bug,会导致窗口会话上下文识别错误,在页面跳转时误判窗口已关闭,主动销毁会话。
    • 修复方式:二选一即可
      • 保留WDIO6.4.0版本:将Chrome降级至85-89版本区间,保证浏览器版本和WDIO内置驱动版本对齐
      • 保留Chrome 100版本:将WDIO升级至7.20及以上版本,同时安装100.x版本对应ChromeDriver,保证框架、驱动、浏览器三者版本严格匹配
  • 弹窗处理逻辑错误
    • 如果点击提交后弹出的是浏览器原生alert/confirm/prompt弹窗,不能通过普通元素定位的方式点击OK按钮,错误的点击逻辑会打乱浏览器会话上下文,触发窗口关闭异常。
    • 校验修复:弹窗出现时先调用browser.getAlertText(),如果能正常返回弹窗文本,说明是原生弹窗,直接调用browser.acceptAlert()方法完成确认操作,不要走元素定位点击逻辑。
  • 句柄切换时机错误
    • 如果点击OK后是打开新标签页而非当前页跳转,不要在点击OK后立刻获取窗口句柄,需先等待browser.getWindowHandles()返回的数组长度大于操作前的窗口数量,确认新窗口句柄已经生成后再执行切换,否则会拿到过期的窗口上下文,触发会话不存在的异常。
  • 内存溢出为连带故障
    • 抛出JavaScript heap out of memory是会话丢失后的连带现象:WDIO在会话异常关闭后,默认轮询逻辑不会校验会话存活状态,会持续生成等待任务堆积在内存中,最终触发堆内存溢出,修复前面的核心问题后该报错会自动消失,不需要单独调整Node运行内存参数。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 23:48:50