51Testing软件测试论坛

标题: 有没有办法能够不限定等待时间? [打印本页]

作者: FLY000    时间: 2010-10-28 18:03
标题: 有没有办法能够不限定等待时间?
[attach]65990[/attach]

如图,想要等待一直到“请点击下载日志文件”字样出现时,关闭对话框;

y= Browser("Wtap2.0").Page("DataManagePage").Frame("ImportDateFrame").Link("请点击下载日志文件").WaitProperty("visible",True,50000)
if y = true then
  Browser("Wtap2.0").Page("DataManagePage").Frame("ImportDateFrame").WebElement("关闭").Click
else
  msgbox("导入时间过长")
endif

因为导入需要多长时间不能确定,所以有没有办法能够不限定时间?
作者: lyscser    时间: 2010-10-28 21:58
本帖最后由 lyscser 于 2010-10-28 22:02 编辑

1.
等待时间的艺术

      对象是否出现不明确或者应用系统响应时间不确定的时候,我们往往采取Wait的方法,而且这个时间是不确定,所以一般初学者会考虑使用最大时间值(系统最慢的情形)。其实完全没有必要等这么长时间,而且如果系统忽快忽慢怎么办?总不能每次“跑脚本”之前都去修改一次吧,这样脚本少还可以,脚本多(一个或多个测试集往往牵涉到几十上百个测试脚本)了呢?这样的话,脚本维护的代价太昂贵了!
      这种情况下可以考虑写一些循环语句代替wait语句,这些语句写得合理的话,会在系统响应的第一时间做下一步操作,而长时间无响应就可以通过跳出条件来终止运行,报告系统连接超时就可以了。因为这种速度的系统版本客户是不会要的,一般情况下这种测试是没有意义的。
下面是我曾经使用的一些例子:
1、系统必须作出响应的情形,无须跳出,只待系统正常,否则手动干预:
Do                                                                  
   If  Browser("teller").Page("teller").Frame("content").WebList("ACCT_STATUS").GetROProperty("value")  = "" Then                                   
   Else                                                               
   Exit Do                                                            
   End If                                                              
Loop                                                                 
2、使用WaitProperty函数,该函数的作用基本上和If……Exist(second)……End If比较类似。但是它的判断结果有True和False两种,在If的判断语句的时候很方便,因为条件成立可以执行下一步,反之如果需要不成立而去执行下一步,他的作用就不是If……Exist(second)……End If所能比的了。
WaitProperty("visible",true,10000)
第一个引号内参数是对象的属性名称,第二个是该属性的值,第三个就是等待的时间,单位是毫秒,具体的应用如:
If Browser("teller").Page("teller").WebElement("手续费打印完毕!               
   ").WaitProperty("innertext","手续费打印完毕!",60000) = False Then         
    Browser("teller").Page("teller").Image("ToolBar_Refresh_0").Click              
Elseif Browser("teller").Dialog("Microsoft Internet Explorer").Exist(10)Then         
     Browser("teller").Dialog("Microsoft Internet Explorer").WinButton("确定").Click
    Browser("teller").Page("teller").Image("ToolBar_Refresh_0").Click            
    Reporter.ReportEvent micFail, "发出托收票据", "交易失败"              
    ExitAction(-1)
End If                                                                  
3、定义弹出框存在性状态,使用循环语句判断
Dim blnDone,counter
blnDone=false
counter=1
While blnDone
        Wait (1)
        blnDone=Window("iexplore").WinObject("OK").Exist
        counter=counter+1
        If counter=10 then
           blnDone=True
        End if
Wend
4、循环判断,跳出条件是i=10
Dim i
i=1
while ((window("iexplore").WinObject("OK").Exist) and (i<10))
       window("Iexplore").WinObject("OK").Click
i=i+1
wend
作者: FLY000    时间: 2010-11-24 17:37
本帖最后由 FLY000 于 2010-11-24 17:38 编辑

回复 2# lyscser


        While Dialog("请稍等").GetROProperty("Visible") = "True"
                i = i + 1
        Wend

我想实现不定等待时间的效果,就是一直到对话框消失,但是当对话框消失时,Dialog("请稍等").GetROProperty("Visible")也取不到值了,这时会提示:
Cannot identify the object "请稍等" (of class Dialog). Verify that this object's properties match an object currently displayed in your application.

请问 无限制等待时间该怎么做?
作者: sunnyswu    时间: 2010-11-24 20:37
回复  lyscser


        While Dialog("请稍等").GetROProperty("Visible") = "True"
              ...
FLY000 发表于 2010-11-24 17:37


可以 这么做嘛
不适用while end while 循环
使用 do loop until 循环

1 先判断 Dialog("请稍等")是否存在
2 判断该对话框是否是自己所要的
不知道 理解对不对

另外 什么叫无限制等待时间?
是 超时后,下载没有完成, 还要继续下载吗?
而不是 继续执行下一步
作者: FLY000    时间: 2010-11-24 20:45
Function TruncateBalance()
    Browser("Wtap2.0").Page("DataManagePage").Frame("CollectMainFrame").Link("工具_2").Click
        Browser("Wtap2.0").Page("DataManagePage").Frame("CollectMainFrame").Link("舍位到万元集").Click
        Window("舍位平衡").WinObject("regexpwndclass:=TRadioButton","text:=.*舍位平衡").Click
        Window("舍位平衡").WinObject("regexpwndclass:=TButton","text:=确定").Click
        If Dialog("请稍等").WaitProperty("visible",False,600) = True Then
                Exit Function
        End If
End

等待对话框消失时,退出函数,这个同步点没有起作用,运行到IF语句,马上就到了EXIT FUNCTION这句,而此时对话框都没有消失;
注:这个对话框已添加到对象库;
作者: FLY000    时间: 2010-11-24 21:24
回复 4# sunnyswu

无限制主要是不确定,操作什么时候能够执行完毕,可能几十分钟也说不定;
难道要把几十分钟换算成秒来处理?

EXIST()的话,括号里面要写时,如果是几十分钟,也可以吗?
作者: sunnyswu    时间: 2010-11-24 21:56
回复 6# FLY000


朋友 是这么回事
其实 这个lyscser把问题说得比较清楚了
do
if Link("").exist(0) then
     ' 执行具体操作
     退出循环
else
     等待
     或者也可以设置最大的等待时间,当等待时间达到后,退出循环
end if
loop true
不知道 你是否要这个效果
作者: xieyang702    时间: 2010-11-25 09:59
恩,这样设置只是  如果等待时间太短的话,不会中断程序的执行,而是进行判断后继续执行程序!
作者: FLY000    时间: 2010-11-26 15:28
唉,郁闷,不知道是不是我们的系统比较异常

明明是看不到的对象,获取属性还都是EXIST = TRUE,VISIBLE= TURE
明明是已经消失了的对象 Dialog("请稍等").WaitProperty("visible",False,5000) = false

受不了了。。。。
作者: testlab    时间: 2010-11-26 15:54
是不是有其他对象也被识别成了Dialog("请稍等")
作者: wangsc_testing    时间: 2010-11-26 16:32
回复 2# lyscser
学习了!
作者: FLY000    时间: 2010-11-26 17:00
回复 10# testlab


    没有,页面上只有一个这个对话框
作者: FLY000    时间: 2010-12-6 15:59
回复 2# lyscser

请问,我1楼的做法理论上是对的么?
作者: skyzhu    时间: 2010-12-6 16:24
隐藏的控件,就算看不到,EXIST 也会是true
但隐藏了控件,他的坐标就肯定 不会大于0了
属性不能以视觉为判断依据
作者: fanliukund    时间: 2010-12-6 17:29
回复 14# skyzhu

恩恩 学习了


作者: FLY000    时间: 2010-12-6 18:21
回复 14# skyzhu


下午调试了下,1楼的写法可以行得通




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