|
问题现象:
系统中有一些菜单是用浮动窗口做的,鼠标移动到某个菜单项上,然后下面会有浮动菜单弹出。本来可以用很简单的Fireevent "Onmouseover" 来解决。不过我遇到的菜单这样处理了没有反应,而另一个同事遇到同样的问题就可以很容易解决。
解决办法:
后来据我分析,同事那边估计那个菜单项是Link的,而我遇到的菜单项是WebElement的,据HP专家讲,QTP的这个FireEvent对WebElement支持的不好。于是专家提供了一个引用外部API的方法给我来解决问题。下面拿来分享一下,也许哪天你就会碰到这样的问题,不妨试试。
Extern.Declare micLong, "SetCursorPos", "user32.dll", "SetCursorPos", micLong, micLong
Extern.SetCursorPos X,Y '鼠标移动到坐标(X,Y)
Extern.Declare micVoid, "mouse_event", "user32.dll", "mouse_event", micLong, micLong, micLong, micLong, micLong
Extern.mouse_event 2,X,Y,0,0 '鼠标按下
Extern.mouse_event 4,X,Y,0,0 '鼠标抬起
这里有2个方法,分别是SetCursorPos和mouse_event。首先取得WebElement的绝对坐标,然后分别加一点(因为坐标是控件左上角,避免点不到,把坐标的横纵坐标都加5-10左右),然后使用SetCursorPos方法,鼠标就会正常移动到那个控件上,菜单也就正常弹出来了。mouse_event可能用到的比较少,其实就是Click点击事件,如果用这种方法写就很麻烦,必须把鼠标按下和鼠标抬起都用上才能作为点击的事件。后来在我做的脚本里,经常会用到鼠标移动的方法,点击的方法目前没用到,因为基本上Click都很正常,也许哪天出问题了就可以用这种了。
扩展一下,其实QTP里可以用这个Extern.Declare引用很多外部的API,只要你知道怎么用,像上面两个方法,我也是通过帮助看懂了一点点,具体这个Extern.Declare怎么用还是去看帮助吧。
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/tulituqi/archive/2008/12/02/3431054.aspx |
|