UFT设置10秒超时时部分页面执行步骤耗时超5分钟问题咨询
UFT网页场景超时设置失效、单步执行耗时超5分钟问题排查
问题产生原因
- 网页异步请求挂起触发UFT默认等待逻辑:异常页面普遍存在未正常返回的异步请求(比如第三方统计埋点、广告资源请求、未捕获异常的接口调用、无响应的WebSocket长连接),UFT Web插件默认的页面加载判定规则是等待所有网络请求完成,该逻辑的内置硬超时为300秒(即5分钟),优先级高于用户手动设置的10秒对象识别超时参数,因此会等到内置超时触发才会继续执行步骤;无异常请求的页面不存在挂起请求,因此其他脚本可以瞬时完成执行。
- DOM遍历识别过程卡住:如果异常页面使用Shadow DOM、跨域动态iframe、微前端架构拆分的自定义组件,UFT在识别目标对象时会默认遍历全DOM树做属性匹配,当页面DOM节点量级过大、或存在无访问权限的跨域iframe时,遍历过程会被阻塞,直到内置的DOM遍历超时(默认300秒)才会终止,不受手动设置的步骤超时参数约束。
- 浏览器弹窗阻塞通信链路:如果异常页面触发了未处理的JS告警、证书错误提示、权限申请弹窗,UFT注入到浏览器的BHO通信插件会被弹窗阻塞,无法向UFT主程序返回步骤执行结果,会持续等待直到弹窗默认超时(约5分钟)才会抛出状态。
可行解决方法
- 调整页面加载判定规则:打开UFT路径
工具>选项>GUI测试>Web>高级,将「页面加载完成判定条件」从默认的等待所有资源加载完成修改为等待DOM状态为Ready,同时勾选「忽略挂起的异步XHR/fetch请求」,手动将异步请求最长等待时长设置为10000毫秒,修改完成后重启UFT生效。 - 缩小对象识别范围:不要使用全DOM匹配的方式识别异常页面的操作对象,将目标对象的父层级锚定到离操作元素最近的、属性稳定的静态容器节点上,同时给所有识别属性增加
visible:=true的过滤条件,跳过不可见节点、跨域无权限iframe的遍历流程;针对Shadow DOM、微前端子应用场景,提前将对应子容器节点添加到对象库,避免UFT启动全DOM遍历查找。 - 前置阻塞项清理逻辑:在进入异常网页场景的步骤前,增加弹窗自动关闭逻辑,提前拦截可能阻塞通信的弹窗,参考代码:
' 循环关闭页面弹出的JS告警、确认弹窗 Dim oDlg Set oDlg = Browser("micclass:=Browser").Dialog("micclass:=Dialog") On Error Resume Next While oDlg.Exist(1) oDlg.Close Wend ' 开启浏览器静默模式,屏蔽证书错误、资源拦截提示 Browser("micclass:=Browser").Object.Silent = True On Error GoTo 0
- 增加步骤级硬超时兜底:不要完全依赖全局超时配置,对异常场景的操作步骤单独使用
WaitProperty方法设置10秒硬超时,比如点击按钮前先执行Browser("业务页面").Page("业务页面").WebButton("提交").WaitProperty "enabled", True, 10000,强制等待10秒后无论对象是否符合预期状态都继续向下执行,避免无意义的长等待。
内容的提问来源于stack exchange,提问作者Jaime Garay
相关产品推荐
相关产品推荐

