在日常运行脚本的过程中,尤其在夜间运行脚本,由于IT Policy的一些问题会导致脚本Fail
主要原因可能大部分是系统自动锁定导致的
由于系统自动锁定,对于出现的security alert对话框,QTP无法把焦点Focus过来,从而导致脚本失败。
解决方法
1.
要求IT针对特定测试机设定单独的组策略,取消定时自动锁定的组策略;
2
但是这类要求在HP是不可能实现的,所以我们做出了第二种办法
使用QTP直接调用Windows API
- Sub ClickButton(WinTitle)
- 'Author: shao JieMing
- Const WM_COMMAND = 273
- Extern.Declare micLong, "PostMessage", "user32.dll", "PostMessageA", micHwnd, micLong, micLong, micLong
- buttonCode = 6
- Hwnd = Window("regexpwndtitle:="&WinTitle).GetRoProperty("hwnd")
- lResult = extern.PostMessage(Hwnd, WM_COMMAND, buttonCode, 0)
- End Sub
在需要处理这类对话框的地方直接Call这个函数
3.
方法2还是有欠缺的地方,就是由于Dev的不断修改,这类Alert对话框可能不断变化出现的位置,从而导致脚本也需要不断跟着修改,所以我们有了方法3-QTP的场景恢复功能
新建QTP Funtional Library
- Function ClickButton(Object)
- Const WinTitle = "Security Alert"
- Const WM_COMMAND = 273
- Extern.Declare micLong, "PostMessage", "user32.dll", "PostMessageA", micHwnd, micLong, micLong, micLong
- buttonCode = 6
- Hwnd2 = Window("regexpwndtitle:="&WinTitle).GetRoProperty("hwnd")
- lResult = extern.PostMessage(Hwnd2, WM_COMMAND, buttonCode, 0)
- End Function
Note:注意此处的ClickButton(Object)
然后新建QTP Recovery 场景
1.Tigger选择Pop Up情况
2.用Spy指定Security Alert对话框
3.Recovery指定当前场景调用这个Function
4.Post-recovery选择Repeat当前Step然后继续
加入到当前脚本的环境中.
好处
1)脚本运行中只要出现Security Alert就可以在系统锁定情况下处理掉
2)不需要Update脚本,Team中其他人可以直接指定当前场景就可以应用过来
缺点
目前只是写死了处理Security Alert对话框,其他类似对话框还没有处理,作为后续工作来做