|
环境: PB,QTP10.0
功能简介:登录Window("COPS HK DEV1 (COPS) Y")窗体后,打开菜单,出现一个退出的对话框,选择exit然后退出
疑问:
QTP自动录制的代码如下:
Window("COPS HK DEV1 (COPS) Y").WinMenu("menu").Select "File;Exit Alt+F4"
PbWindow("w_main").Dialog("COPS - Exit").WinButton("Yes").Click
但是回放的时候,每次看不见menu及选择menu的动作,然后就一直停在了这里,没有任何错误提示。
过程:中间我考虑过了很多原因,试过能查到的所有解决方案。
1.对winmenu描述性编程Window("COPS HK DEV1 (COPS) Y").WinMenu("menuobjtype=2").Select "File;Exit Alt+F4" 失败,同上
2.QTP默认录制方式是无法录制下拉菜单的,必须修改设置后再录制
修改设置如下:
在tools -> web event recording configuration 点击custom settings... 展开Web objects,
选种webelement,点击event -> add -> onmouseover 。并确定在record栏内,状态是enabled。
然后再重新录制你的脚本。
失败,估计这个方式是对web 程序的,对PB无效。
3.对menu菜单,使用虚拟对象。我将整个菜单虚拟成一个对象,但是录制的过程中,QTP无法使用这个对象。是我虚拟对象的方法有问题?还是这条路根本不通?
4.增加wait等待时间。失败,仍然不行。我感觉在QTP似乎没有必要去增加等待时间。当系统需要比较长的时间来loading一个对象的时候,QTP会自动等候直到loading完成
解决方法一:
最后找到了一种sendkeys的模拟键盘的操作方法。
Dim WshShell
Set Wscript=createobject("Wscript.shell")
Wscript.SendKeys"%{F4}"
Set Wscript=nothing
经过编辑脚本后,可以成功的回放选择菜单的动作和过程。
但是sendkeys有一个局限性,只能应用在该菜单有快捷方式的情况下。如果没有键盘快捷方式,该方法也不行。只能作为一种备用替代方案。
最终完美方案:
最后在开发人员的帮助下,找到了问题所在:
Window("COPS HK DEV1 (COPS) Y").Activate
Window("COPS HK DEV1 (COPS) Y").WinMenu("Menu").Select "<Item 1>;<Item 14>"
是winmenu的select方法的两种方式的选取。
select方法可以select a menu by name/select a menu by index两种方式。
换成by index方式后,并且前面先activate菜单所在的窗体,问题解决了。
可是QTP为什么会自动录制为select a menu by name的方式了,这两种方式的区别是什么了?具体使用中该怎么选取了?
问题及其解决貌似都很简单,解决问题能力太差,这么久才找到问题。可是还是不很明白以后遇见问题了,怎么去排查解决,为什么我就想不到了?
[ 本帖最后由 yangru5052 于 2010-3-24 17:02 编辑 ] |
|