我们有一个应用程序正在加载一些文件,并且在加载文件期间应用程序停止响应一段时间。在测试自动化期间,我们遇到了文件加载自动化的场景,但 qtp 必须等到应用程序再次开始响应。如何编码?有没有像“Wait”这样的属性?
7 回答
有没有像“Wait”这样的属性?
如果是这样,那么它是特定于应用程序的,因此要回答这个问题,需要对应用程序的 GUI 设计进行技术研究。
一般来说,考虑人类用户如何认为应用程序再次“响应”。通常,会有一些视觉提示,比如出现一个按钮,或者某个控件不再灰显。使用同步点在该状态上同步。
如果一切都失败了(即,如果您无法识别在应用程序处理结束时出现、消失或更改其属性的控件),请坚持使用位图检查点,该检查点将寻找人类可以解释的相同视觉线索。
通常,在应用程序准备好再次接受输入之前,同步点或视觉提示来得太早了。然后,如果您的应用程序在预期下一个用户输入之前刷新键盘缓冲区(一个普遍常见的不良设计示例......),您将很难正确同步。击键和鼠标点击将丢失。在这种情况下,您应该 a)通过在下一个输入之前插入延迟(等待函数调用)来解决问题,b)确定应用程序永远不会刷新其输入队列,c)强制视觉线索仅在应用程序之后完成真的准备好接受输入了。当然,b) 和 c) 需要开发人员方面的工作,并且可能在组织上难以实施。
如果问题出现在不同的甚至所有上下文中,请将其传达给测试管理人员,并让他们让开发人员为您的测试机器人实施自定义的“就绪”信号。然后,您可以从 QTP 查询该信号。它可能是一个信号量、一个 Windows 字符串属性(Set/GetPropEx API 调用)、一个文件存在(baaad idea..),或者其他一些危险但不同步的方式,将“就绪”状态从应用程序传递到测试机器人。
所有这一切听起来很疯狂,但我已经完成了以上所有工作,通常效果很好。
如果您想要快速而肮脏的修复,您可以使用通用的等待(秒)。例如,如果您知道您的应用程序将在不到一分钟的时间内准备好使用。但是,如果它因数据量而异,则可以尝试在处理完所有数据后加载的应用程序上使用控件的“存在”属性。IE。
while not loaded
wait(1)
loaded = Window.Control.Exist
Wend
在启用的应用程序对象(例如按钮)上插入一个同步点。同步点允许您指定超时时间。
在我看来,最简单可靠的解决方案是直接从 user32.dll调用 WinAPI 的IsHungAppWindow 。QTP 允许您轻松声明外部函数。
WaitWaitProperty Sync 这三个是保持页面同步的主要属性或方法
Wait 会被大多数程序员使用。
但是,虽然完整页面需要更好地同步才能使用“.Sync”,但它会检查直到同步超时,如果加载成功,它会进入下一步
但是等待等待直到给定的时间,尽管及时发现了对象
假设您的应用程序最多需要 2 分钟才能启动。使用下面的函数来了解您的应用程序是否存在...
函数 checkWindowExistance()
昏暗的我
我=0
对于 i=0 到 120
如果 Window.Dialog.Exist
{
exit for
}
等待(1)'wait_for_1_second
下一个
如果 i = 120 那么
checkWindowExistance = 假
别的
checkWindowExistance = true
结束函数
我们可以使用 While 循环等待应用程序页面屏幕可见,一旦加载脚本应该继续下一个屏幕