FLY000 发表于 2010-10-28 18:03:55

有没有办法能够不限定等待时间?



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

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:16

本帖最后由 lyscser 于 2010-10-28 22:02 编辑

1.
等待时间的艺术
      对象是否出现不明确或者应用系统响应时间不确定的时候,我们往往采取Wait的方法,而且这个时间是不确定,所以一般初学者会考虑使用最大时间值(系统最慢的情形)。其实完全没有必要等这么长时间,而且如果系统忽快忽慢怎么办?总不能每次“跑脚本”之前都去修改一次吧,这样脚本少还可以,脚本多(一个或多个测试集往往牵涉到几十上百个测试脚本)了呢?这样的话,脚本维护的代价太昂贵了!
      这种情况下可以考虑写一些循环语句代替wait语句,这些语句写得合理的话,会在系统响应的第一时间做下一步操作,而长时间无响应就可以通过跳出条件来终止运行,报告系统连接超时就可以了。因为这种速度的系统版本客户是不会要的,一般情况下这种测试是没有意义的。
下面是我曾经使用的一些例子:
1、系统必须作出响应的情形,无须跳出,只待系统正常,否则手动干预:
Do                                                                  
   IfBrowser("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:06

本帖最后由 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:49

回复lyscser


      While Dialog("请稍等").GetROProperty("Visible") = "True"
            ...
FLY000 发表于 2010-11-24 17:37 http://bbs.51testing.com/images/common/back.gif

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

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

另外 什么叫无限制等待时间?
是 超时后,下载没有完成, 还要继续下载吗?
而不是 继续执行下一步

FLY000 发表于 2010-11-24 20:45:28

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 IfEnd

等待对话框消失时,退出函数,这个同步点没有起作用,运行到IF语句,马上就到了EXIT FUNCTION这句,而此时对话框都没有消失;
注:这个对话框已添加到对象库;

FLY000 发表于 2010-11-24 21:24:19

回复 4# sunnyswu

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

EXIST()的话,括号里面要写时,如果是几十分钟,也可以吗?

sunnyswu 发表于 2010-11-24 21:56:10

回复 6# FLY000


朋友 是这么回事
其实 这个lyscser把问题说得比较清楚了
do
if Link("").exist(0) then
   ' 执行具体操作
   退出循环
else
   等待
   或者也可以设置最大的等待时间,当等待时间达到后,退出循环
end if
loop true
不知道 你是否要这个效果

xieyang702 发表于 2010-11-25 09:59:40

恩,这样设置只是如果等待时间太短的话,不会中断程序的执行,而是进行判断后继续执行程序!

FLY000 发表于 2010-11-26 15:28:07

唉,郁闷,不知道是不是我们的系统比较异常

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

受不了了。。。。

testlab 发表于 2010-11-26 15:54:37

是不是有其他对象也被识别成了Dialog("请稍等")

wangsc_testing 发表于 2010-11-26 16:32:41

回复 2# lyscser
学习了!

FLY000 发表于 2010-11-26 17:00:23

回复 10# testlab


    没有,页面上只有一个这个对话框

FLY000 发表于 2010-12-6 15:59:37

回复 2# lyscser

请问,我1楼的做法理论上是对的么?

skyzhu 发表于 2010-12-6 16:24:40

隐藏的控件,就算看不到,EXIST 也会是true
但隐藏了控件,他的坐标就肯定 不会大于0了
属性不能以视觉为判断依据

fanliukund 发表于 2010-12-6 17:29:05

回复 14# skyzhu

恩恩 学习了

FLY000 发表于 2010-12-6 18:21:39

回复 14# skyzhu


下午调试了下,1楼的写法可以行得通
页: [1]
查看完整版本: 有没有办法能够不限定等待时间?