51Testing软件测试论坛

标题: 高手指点:对话框点不掉的问题 [打印本页]

作者: andyzlp232    时间: 2009-7-23 17:14
标题: 高手指点:对话框点不掉的问题
HI,各位:
    近日,偶会遇到一个问题,QTP明明已经对按钮执行了Click操作(从Report里可看出,见附图),但页面上的对话框还是存在,就像未执行click一样,脚本如下:
       If  Browser("信用卡支付").Dialog("安全警报").Exist(3) Then   
          Browser("信用卡支付").Dialog("安全警报").WinButton("是(Y)").Click
      End If
   脚本的本意是判断“安全警报”对话框如果存在,则点击对话框上面的“是”按钮,关闭对话框。但在脚本多次重复运行时,就会出现几次QTP执行了Click操作,但对话框还是没有关闭的情况。  这个问题是不是QTP的Bug啊,我的版本是9.2的。
不知各位高手有没有遇到此类情况,怎么解决呢。

说明一点:可以确定每次运行..Dialog("安全警报").Exist(3)返回是True,即都进入了这个If语句内,也执行了Click操作。

[ 本帖最后由 andyzlp232 于 2009-7-23 18:07 编辑 ]
作者: dreamever    时间: 2009-7-23 18:03
因为Browser("信用卡支付").Dialog("安全警报").Exist(3) 有可能会返回false,所以那句click的操作就不会被执行了。
作者: andyzlp232    时间: 2009-7-23 18:08
原帖由 dreamever 于 2009-7-23 18:03 发表
因为Browser("信用卡支付").Dialog("安全警报").Exist(3) 有可能会返回false,所以那句click的操作就不会被执行了。


我十分确定进入了IF语句内。也执行了Click操作。
作者: intothestorm    时间: 2009-7-23 18:10
可能是QTP的bug,换成键盘输入吧。
Browser("信用卡支付").Dialog("安全警报").WinButton("是(Y)").Type micReturn
作者: lantianwei    时间: 2009-7-23 18:11
我是觉得QTP应该确实进行了点击操作(这里的点击操作应该是通过发送WINDOWS消息实现的),只是Browser("信用卡支付").Dialog("安全警报").WinButton("是(Y)")这个按钮不接受QTP给它发送的这个消息 这主要应该是出于安全的考虑而这样设计的
LZ试下CLICK后面加个坐标值 比如click(1,6,6)
作者: andyzlp232    时间: 2009-7-24 17:31
标题: 回复 5# 的帖子
你说的观点我不是很认同,因为如果WinButton("是(Y)")这个按钮不接受QTP给它发送的这个消息,那么前面几次应该也是点不掉的。。
现在的情况是有时候QTP能点掉,有时却是点不错。。很郁闷
作者: kings727    时间: 2009-7-24 17:35
原帖由 andyzlp232 于 2009-7-24 17:31 发表
你说的观点我不是很认同,因为如果WinButton("是(Y)")这个按钮不接受QTP给它发送的这个消息,那么前面几次应该也是点不掉的。。
现在的情况是有时候QTP能点掉,有时却是点不错。。很郁闷


在这个点击之前加一个wait(1) 试试
作者: helina168    时间: 2009-7-24 21:27
学习了
作者: chooseyou123    时间: 2009-7-27 00:56
恩,我感觉也是在点击之前要wait 一下,可能
你这个对话框弹出的时间可能程序区判断个东西延后了
作者: chooseyou123    时间: 2009-7-27 00:57
因为网络或者系统的环境每时每刻都不一样
导致延迟的时间不同,所以你有时候点击的到有时候点击不到
所以适当放长的时间去wait
作者: lantianwei    时间: 2009-7-27 21:30
标题: 回复 6# 的帖子
解决没?不好意思,是我没看清楚你的问题,还以为你每次都没有点击掉。
如果用WAIT可以解决,那么增加EXISTS的时间应该也行

[ 本帖最后由 lantianwei 于 2009-7-27 21:32 编辑 ]
作者: nefax    时间: 2009-7-27 23:18
结果没有报错加wait肯定没用
作者: 心清清    时间: 2009-7-28 11:36
这个问题我也遇到过,没解决。因为能点掉的情况还是多些。
作者: andyzlp232    时间: 2009-7-28 14:04
标题: 回复 11# 的帖子
加Wait,我曾试过,没有用。
作者: lantianwei    时间: 2009-7-28 16:20
标题: 回复 14# 的帖子
用个WHILE循环下吧,起码可以WORKROUND
作者: yubin    时间: 2009-7-28 16:27
wwww
作者: kings727    时间: 2009-7-29 09:37
1、 如果按你说的“但在脚本多次重复运行时,就会出现几次QTP执行了Click操作,但对话框还是没有关闭的情况。 ”
而且测试报告上也显示,CLICK操作是做了。
这样说:脚本录制是没有问题的,因为从你的测试报告上来看,QTP找到了这个按钮,并且做了CLICK的操作。
2、那么就有可能是软件本身的问题。也就是点击了没有反应。
建议你对这个按钮做一个压力测试看看或者延长WAIT的时间。
QTP运行的速度是很快,至少比人反映快的多,按钮一出来就做操作了。
问题可能出在这里,软件没有对这个操作做出反应。

[ 本帖最后由 kings727 于 2009-7-29 09:39 编辑 ]
作者: hugh007    时间: 2009-7-30 15:37
其实是焦点的问题,当前焦点不在对话框上 而是在之前的页面上。
我的解决方法是:
   
   nReturn = nReturn + ClickObject(WB_ATTENDANCEREPORTLIST_SAVEFILE)

   If WB_ATTENDANCEREPORTLIST_SAVEFILE.Exist(1) Then
     nReturn = nReturn + ClickObject(WB_ATTENDANCEREPORTLIST_SAVEFILE)
   End If

第一次点击保存按钮如果成功,不过if中的第二次点击;
如果不成功,焦点转移到了对话框上,第二次点击一定就可以点到了
作者: kings727    时间: 2009-7-31 12:08
原帖由 hugh007 于 2009-7-30 15:37 发表
其实是焦点的问题,当前焦点不在对话框上 而是在之前的页面上。
我的解决方法是:
   
   nReturn = nReturn + ClickObject(WB_ATTENDANCEREPORTLIST_SAVEFILE)

   If WB_ATTENDANCEREPORTLIST_SAVEFILE.Exist ...

如果是焦点的话,那QTP 如何在之前的页面上找到  WinButton("是(Y)")这个按钮的呢?
而且从楼主给出的测试报告的图上,看出是在这个按钮上执行了CLICK的操作的。
作者: liujinkui    时间: 2009-7-31 13:03
标题: 加个激活
If  Browser("信用卡支付").Dialog("安全警报").Exist(3) Then   
          Browser("信用卡支付").Dialog("安全警报").active
          Browser("信用卡支付").Dialog("安全警报").WinButton("是(Y)").Click
      End If
作者: lantianwei    时间: 2009-7-31 15:58
标题: 回复 20# 的帖子
如果是焦点问题,那么这才是最简单的办法
作者: andyzlp232    时间: 2009-8-6 17:26
多谢liujinkui 、hugh007提供的思路。
不过这个ClickObject(WB_ATTENDANCEREPORTLIST_SAVEFILE)方法 我不清楚,能否指点下。

[ 本帖最后由 andyzlp232 于 2009-8-6 17:31 编辑 ]
作者: andyzlp232    时间: 2009-8-6 17:34
原帖由 kings727 于 2009-7-29 09:37 发表
1、 如果按你说的“但在脚本多次重复运行时,就会出现几次QTP执行了Click操作,但对话框还是没有关闭的情况。 ”
而且测试报告上也显示,CLICK操作是做了。
这样说:脚本录制是没有问题的,因为从你的测试报告上来 ...


不是Wait能解决的,因为我单步调试时也有时会出现脚运运行过了,按钮还是点不掉的情况

我用了个最狠的方法
While Browser("..").Dialog("..").Exist(3)
Browser("..").Page("..").WinButton("..").Click
Wend
直到点掉为止

[ 本帖最后由 andyzlp232 于 2009-8-6 17:37 编辑 ]
作者: hqf007    时间: 2009-8-6 21:45
建议用lowlevel模式去执行以下,确定是没点到,或者点了但没用
作者: 假装不在    时间: 2009-8-7 11:52
Extern.Declare miclong,"SendMessage","user32.dll","SendMessage",micHwnd ,miclong,miclong,miclong
h= Browser("信用卡支付").Dialog("安全警报").WinButton("是(Y)").GetROProperty("hwnd")
Browser("信用卡支付").Dialog("安全警报").active
WM_LBUTTONDOWN   =   &H0201
WM_LBUTTONUP   =   &H0202  
Extern.SendMessage h,WM_LBUTTONDOWN,0,0
Extern.SendMessage h,WM_LBUTTONUP,0,0


::yiwusuoyou::: 想做好自动化,就要学好win32 api

[ 本帖最后由 假装不在 于 2009-8-7 11:54 编辑 ]
作者: shanxi    时间: 2009-8-7 12:46
LS的那个图标使我发现了有

悠嘻猴

这个表情耶
作者: 假装不在    时间: 2009-8-7 13:49
原帖由 shanxi 于 2009-8-7 12:46 发表
LS的那个图标使我发现了有

悠嘻猴

这个表情耶


一片春愁待酒浇,江上舟摇,楼上帘招。秋娘渡与泰娘桥。风又飘飘,雨又萧萧。
                                           人渣陈绍英
何日归家洗客袍?银字笙调,心字香浇。流光容易把人抛,红了樱桃,绿了芭蕉。

你的签名怎么那么绕口呢。
作者: gaohui    时间: 2009-8-7 16:58
我也越到类似的问题
使用的也是QTP9.2
自动化运行的时候,有时候执行,有时候无法执行。。。

lz解决了吗?
作者: andyzlp232    时间: 2009-8-25 14:30
标题: 回复 28# 的帖子
我用
While ...Exist(3)
     ...("确定").Click
Wend
去解决,虽然这个方法比较的笨,但效果很好




欢迎光临 51Testing软件测试论坛 (http://bbs.51testing.com/) Powered by Discuz! X3.2