自动化脚本在一台电脑上运行正常,换到速度较慢的环境后却频繁报错,很多时候并不是操作步骤写错,而是界面还没准备好,脚本已经执行到了下一步。处理Squish同步等待怎么配置Squish waitForObject等待超时怎么办,重点是根据对象状态选择等待方式,别把固定暂停当成通用方案。
一、Squish同步等待怎么配置
Squish录制脚本时,通常会在点击、输入等动作前加入waitForObject()。它会等待目标对象存在、可见并且处于启用状态,满足条件后才返回对象引用,比固定等待几秒更稳定。
1、给单次操作设置等待时间
某个页面加载比较慢时,可以单独增加该对象的等待时间。
①找到报错步骤中的waitForObject()。
②在对象名称后添加超时参数。
③超时参数使用毫秒,不是秒。
④保存脚本后重新运行。
这里表示最多等待30秒。对象提前可用时,脚本会马上继续,不会固定停满30秒。
2、设置测试套件默认超时
很多页面都需要更长等待时,可以统一修改测试套件设置,不用每一行都加参数。
①打开目标测试套件。
②进入【Test Suite Settings】→【Test Settings】。
③找到【waitForObject()timeout】。
④输入新的默认等待时间。
⑤保存设置并重新执行测试。
该设置对应testSettings.waitForObjectTimeout,会影响waitForObject()、waitForObjectExists()和waitForObjectItem()等对象查找函数。单个函数填写了超时参数时,以该参数为准。
3、按对象状态选择等待函数
对象“已经创建”和“已经能操作”是两回事,函数选错了,也会出现莫名其妙的超时。
(1)waitForObject():等待对象存在、可见并启用。
(2)waitForObjectExists():只要求对象存在,适合暂时隐藏或尚未启用的控件。
(3)waitForObjectItem():等待列表、表格或树中的指定项目出现。
(4)waitFor():持续检查某个属性或业务条件。
例如,按钮已经显示,但要等它变成可点击状态,可以这样写:
waitFor()会重复判断条件,条件变为真后立即继续;超过指定时间仍未满足,则返回false。
4、少用固定的snooze等待
这种写法只是停5秒,并不知道页面是否真的加载完成。机器快时浪费时间,机器慢时又可能不够。
更稳的做法是等待目标对象、属性或提示文字出现。脚本跟着应用状态走,不用靠猜时间。
二、Squish waitForObject等待超时怎么办
waitForObject()超时后会抛出可捕获的LookupError。这并不只是“等待时间太短”,也可能是对象名称变了、控件不可见,或者脚本处在错误窗口和页面上下文中。
1、确认对象是否真的可操作
①暂停测试并观察被测程序界面。
②确认目标窗口已经打开。
③检查控件是否被弹窗或遮罩层挡住。
④查看控件是否处于禁用状态。
⑤暂时改用waitForObjectExists()进行验证。
如果waitForObjectExists()能找到,waitForObject()却一直超时,说明对象大概率已经创建,但还没有达到可见、启用的条件。此时应继续等待状态变化,而不是只把超时时间越调越大。
2、检查对象映射是否失效
界面升级后,按钮标题、层级、自动生成ID或父窗口可能发生变化,原来的符号名称仍然指向旧属性。
①等待超时后打开【Object Not Found】窗口。
②单击【Pick New Object】。
③重新选取当前界面中的目标控件。
④对比新旧对象的属性差异。
⑤进入【Object Map】修改不稳定的识别属性。
Squish可以通过该窗口比较新对象与原对象名称使用的属性。测试脚本使用符号名称后,界面变化时通常只需更新对象映射,不必逐行改脚本。
动态变化的坐标、索引、标题和随机ID不要轻易作为核心识别条件。尽量保留类型、稳定名称和可靠的父对象关系。
3、检查窗口、标签页和页面上下文
目标对象可能存在,但脚本当前仍停留在旧窗口、错误标签页或其他浏览器Frame中。
①确认点击上一步后页面确实完成切换。
②检查当前活动窗口是否正确。
③Web测试中核对Frame或页面上下文。
④多应用测试中确认当前Application Context。
⑤返回正确上下文后再次查找对象。
这类问题延长等待时间基本没用。上下文不对,等一分钟也找不到。
4、检查对象名称是否匹配了错误控件
页面里有多个相同按钮时,过于宽泛的对象名称可能匹配错误,或者因为结果不唯一而查找失败。
①使用【Spy】重新选取目标对象。
②查看对象类型、名称和父级属性。
③删除容易变化的属性。
④补充能够区分同类控件的父对象或固定属性。
⑤保存对象映射后复跑。
先把识别规则修稳,再考虑增加超时。对象名称本身不可靠,等待再久也只是晚一点失败。
三、Squish同步等待怎么写得更稳定
同步策略稳定后,脚本在不同机器和不同网络环境中的波动会小很多。比较实用的做法,是把“对象出现”和“业务完成”分开等待。
1、等待真正代表完成的状态
①点击触发加载的按钮。
②等待加载遮罩消失。
③等待结果区域出现。
④检查结果数量或状态文字。
⑤确认完成后再执行下一步。
例如,列表控件出现了,不代表数据已经加载完。继续等待行数增加或“加载完成”提示,会比单纯等待列表对象更准确。
2、为超时保留诊断信息
可以捕获LookupError,记录当前页面状态后再让测试失败。
排查时同时保留截图、日志和对象属性。这样能看出到底是页面没打开、控件没启用,还是名称已经变化,不用每次都靠重新运行碰运气。
总结
处理Squish同步等待怎么配置Squish waitForObject等待超时怎么办,不能只靠延长时间。对象尚未创建、已经存在但不可操作、业务状态没有完成,对应的等待方式并不相同。先确认对象状态和页面上下文,再检查对象映射,脚本会稳定不少。希望本文能为大家配置Squish同步等待和排查超时问题提供参考,如需进一步了解相关内容,可联系咨询。