开朗幽默 发表于 2010-7-30 17:54:09

判断某窗口是否存在,脚本运行时间过长。

在脚本中使用exits判断某窗口是否存在。当其不存在时,脚本大概要等30S左右才进行下一步。使用了exits(timeout)语句,也没有得到改善。请问有没有别的能够节约时间的方法啊?

yahuu 发表于 2010-7-31 15:18:22

使用了exist(timeout)语句也没改善,说明不是因为exist的问题

你的exist都打错

dllnetspy 发表于 2010-7-31 21:35:32

这个时间是没办法加快的,除非是指定的对象提前出来

sterson 发表于 2010-7-31 22:24:44

楼主可以试一下两种方法
1,是在option里有个可以设置脚本运行超时时间的
2,将运行模式设置为fast

skyzhu 发表于 2010-8-2 09:50:17

使用 exist(timeout) 需要确保上一层对象存在,否则就会出现等待超长时间的情况
如果不能确保,就一层层exist判断

开朗幽默 发表于 2010-8-3 09:39:17

回复 5# 的帖子

那你的意思是如果脚本中存在Browser、Page、Frame、weblist几层对象,需要对这几层对象分别用exist来判断?脚本不是会很复杂?
IF BROWSER(BROWSER).EXIST THEN
IF BROWSER(BROWSER).PAGE(PAGE).EXIST THEN
    IF BROWSER(BROWSER).PAGE(PAGE).FRAME(FRAME).EXIST THEN
       IF BROWSER(BROWSER).PAGE(PAGE).FRAME(FRAME).WEBLIST(WEBLIST).EXIST THEN
是不是这样?

skyzhu 发表于 2010-8-3 10:54:52

之前我就是这么做的,必要的地方做一下就行,也不用都这样,如果前面的操作不对上层对象比如browser、page有影响,通过前面的操作,原来在的还是在,不在的还是不在(看脚本逻辑了),那么就用上EXIST(0),执行速度上基本没什么影响的,也避免了卡住的情况

BROWSER(BROWSER).PAGE(PAGE).FRAME(FRAME).WEBLIST(WEBLIST).EXIST
整句解析时,QTP会先找上层对象的

june.diny 发表于 2010-8-3 11:00:30

1、要确认这个窗口的出现与否,是否影响下一步的执行?
2、如果不影响,直接可以执行下一步,可以在脚本中加一个计时器+公共变量(timeout),例如:
dim time_out
time_out=10    '以秒为单位,可以放到公共变量中
time_tag=Time()    '开始计时
Do While (Time()-time_tag)*24*3600 < timeout
   ....
Loop
当然,也可以通过设置qtp setting,缩短判断对象是否出现的时间(File-Setting-Run)

sogohu 发表于 2010-8-3 14:30:29

回复 1# 的帖子

object.exist(5)这个是5秒,是强制等待2秒,静态的,即使第2秒已经判断出存在对象,那么依然需要等待5秒钟后才运行

用object.waitproperty("visible",true,10000) 这个是动态等待,10000是毫秒,1000毫秒内只要判断出对象存在,就立即跳转

会快点

开朗幽默 发表于 2010-8-3 14:35:14

现在的问题是,对页面的“返回”按钮设置检查点,判断之前的页面上的某个窗口或者某个输入框是否存在,若存在则FAILED,不存在才PASS。它不存在,用EXIST判断要等大概30秒,用“visible”来判断,也要等差不多这么长时间。

skyzhu 发表于 2010-8-3 14:52:57

回复 9# 的帖子

2种方式是一样的。。。exist是属性集合而已。都是只要不存在就等。。。。到设置的超时参数为止



楼上几位。。。随便找个页面验证下就知道了,下面的代码,把浏览器全关掉,那个叫慢。。。那样应该就能明白楼主的意思了,楼主就一层层来吧

If Browser("百度一下,你就知道").Page("百度一下,你就知道").WebButton("百度一下").Exist(0) then
        msgbox1
else
        msgbox 2
end if

开朗幽默 发表于 2010-8-3 17:02:48

一层一层地判断也试过了,还是很慢。Setting初始的值是20,算了一下,大概要等30S;改成1之后,等7秒左右。这个是目前最省时的方法。就是不晓得在脚本里边改应该怎么弄。

skyzhu 发表于 2010-8-3 18:02:53

回复 12# 的帖子

那就用 exist(0) 吧

其实只要逻辑清楚,才4层最多等1、2秒
外层不存在里面就都不存在了,而存在的话exist是不会等待的

开朗幽默 发表于 2010-8-4 14:59:24

回复 13# 的帖子

存在当然不需要等待,但问题是不存在的嘛。用exist(0)也要等大概30S

xyan 发表于 2010-8-4 15:12:48

for i=1 to 30
      If Browser("百度一下,你就知道").Page("百度一下,你就知道").WebButton("百度一下").Exist(1) then
         exit for
next

判断一下,如果存在就跳出循环

skyzhu 发表于 2010-8-4 15:14:32

回复 14# 的帖子

你自己6楼的帖子就是答案,换成 exist(0)。。。不会等
页: [1]
查看完整版本: 判断某窗口是否存在,脚本运行时间过长。