51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

查看: 3084|回复: 15
打印 上一主题 下一主题

这么做怎么会死循环?

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2005-10-20 11:26:24 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
...
rc = GUI_load(gui);
while (rc == E_FILE_OPEN){
  GUI_close_all();    #也尝试过GUI_unload(gui);
  rc = GUI_load(gui);
}

if (rc != E_OK){
  pause("Can't open GUI file.");
  texit;
}

set_window(SomeWindow, 2);

问题的起源是这样的:回放脚本的时候,偶尔会在set_window这句语句暂停,说找不到窗口。事实是运行大部分时候是可以找到这个窗口的。于是我在脚本运行到此处暂停后打开GUI map editor,发现gui map没有被load进来,也就是说GUI_load语句没有成功,查看了一下返回值是E_FILE_OPEN,于是我写了这个while循环。居然是个死循环??执行到此处就跳转不出去了
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

该用户从未签到

2#
发表于 2005-10-20 11:54:41 | 只看该作者
从代码上看
如果GUI_load(gui)==E_FILE_OPEN
while就是死循环。
回复 支持 反对

使用道具 举报

该用户从未签到

3#
 楼主| 发表于 2005-10-20 12:01:11 | 只看该作者
是啊,问题在于循环体里已经把gui close或unload了,再load,怎么还会返回E_FILE_OPEN呢?
怎么才能让GUI_load不返回E_FILE_OPEN?
回复 支持 反对

使用道具 举报

该用户从未签到

4#
发表于 2005-10-20 12:08:07 | 只看该作者
为什么要用循环呢?用IF来进行检查吧,比如GUI_load有问题,跳出提示框中止这项测试或不跳出就中止然后调用其它的测试,需要的话还可以写下异常记录,以供测试人员检查再加以解决~
回复 支持 反对

使用道具 举报

该用户从未签到

5#
 楼主| 发表于 2005-10-20 13:38:29 | 只看该作者
我碰到的麻烦是这样的,我先写了个函数:

public function SomeTest(in CurrentWindow)
{
  auto gui, rc;
  gui = ".//GUI_Map//"&CurrentWindow&".gui";
  rc = GUI_load(gui);
  if(rc != E_OK){
    pause("Can't open GUI file: "&gui&".");
    texit;
  }
  set_window(CurrentWindow);
  #每个window一个gui map,而且window的名称跟gui map的文件名设为一样

  #do something else

  GUI_unload(gui);
}

结果有时调用这个函数成功,偶尔呢不成功。在set_window的时候说没有找到CurrentWindow。不知道是什么原因。奇怪的是此时GUI_load返回的是E_FILE_OPEN,这应该是不可能的,因为我在函数末已经unload了,其他地方也没有load过
回复 支持 反对

使用道具 举报

该用户从未签到

6#
发表于 2005-10-20 13:38:46 | 只看该作者
while (rc == E_FILE_OPEN){
  GUI_close_all();    #也尝试过GUI_unload(gui);
  rc = GUI_load(gui);
}

--------------------
while中rc又被负值GUI_load(gui)
回复 支持 反对

使用道具 举报

该用户从未签到

7#
 楼主| 发表于 2005-10-20 13:43:40 | 只看该作者
while中rc又被负值GUI_load(gui)
-----------------------------------------------
但是赋值前gui已经被unload了,所以再次load的话也不应该rc==E_FILE_OPEN
回复 支持 反对

使用道具 举报

该用户从未签到

8#
发表于 2005-10-21 14:44:34 | 只看该作者
的确有点怪异,
试试这样,不知是否有用

public function SomeTest(in CurrentWindow)
{
  auto gui, rc;

  #*****增加****
    GUI_close("<temporary>") ;
    GUI_unload_all();
  #*************

  gui = ".//GUI_Map//"&CurrentWindow&".gui";
  rc = GUI_load(gui);
  if(rc != E_OK){
    pause("Can't open GUI file: "&gui&".");
    texit;
  }
  set_window(CurrentWindow);
  #每个window一个gui map,而且window的名称跟gui map的文件名设为一样

  #do something else

  GUI_unload(gui);
}

BTW.你的GUI路径写成反斜杠好别扭啊.呵呵
回复 支持 反对

使用道具 举报

该用户从未签到

9#
 楼主| 发表于 2005-10-24 11:12:09 | 只看该作者
呵呵,还是不行。挺怪异的。

BWT: 反斜杠我应该是从帮助文件的example里抄来到吧
回复 支持 反对

使用道具 举报

该用户从未签到

10#
发表于 2005-10-24 13:06:58 | 只看该作者
这个是GUI_load在WR下按F1的help:

In the following example, the script loads a GUI file called file1.gui using the GUI_load function and then unloads it using the unload function.

# This loads the GUI file

GUI_load ("E:\\file1.gui");

好像是正斜杠啊
回复 支持 反对

使用道具 举报

该用户从未签到

11#
 楼主| 发表于 2005-10-24 16:29:26 | 只看该作者
改成\\问题也一样。无语
不弄了,呵呵
回复 支持 反对

使用道具 举报

该用户从未签到

12#
发表于 2005-10-25 10:41:51 | 只看该作者
问题的根源是 “回放脚本的时候,偶尔会在set_window这句语句暂停,说找不到窗口”

是否换种思路,你加入一个同步点,等待窗口出现?
如果窗口出现然后进行后续的操作,有可能是脚本速度执行太快,不是没有加载成功!

你试验一下同步点的方法!

如果不行,我觉得你研究一下gui map保存的对象,对象用到了那些属性,是否是物理描述中有的属性导致的问题!
回复 支持 反对

使用道具 举报

该用户从未签到

13#
 楼主| 发表于 2005-10-25 11:10:18 | 只看该作者
的确是好的建议。我试一试
我测试的软件不是标准的windows软件,窗口都没有title,所以物理描述里的label不起作用。这时用什么方法来区别不同的窗口比较好?
我目前用的是{class: window, nchildren: SomeNumber}
回复 支持 反对

使用道具 举报

该用户从未签到

14#
发表于 2005-10-25 22:30:48 | 只看该作者
extern unsigned int FindWindowA (string, long);
hWnd = FindWindowA(“类名字",0);
DWIN = "{ handle: " & hWnd & " }";
setwindow(DWIN,时间);
后续的操作

通过上边的办法,让你需要的窗体获得焦点
类名字的到的方法,你可以利用vc中spy++或者其他可以得到窗口的class name的工具得到。
回复 支持 反对

使用道具 举报

该用户从未签到

15#
 楼主| 发表于 2005-10-26 10:38:59 | 只看该作者
呵呵,高!
得加载user32.dll吧?
回复 支持 反对

使用道具 举报

该用户从未签到

16#
发表于 2005-10-26 12:04:24 | 只看该作者
对的!
回复 支持 反对

使用道具 举报

本版积分规则

关闭

站长推荐上一条 /1 下一条

小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

GMT+8, 2024-5-5 17:05 , Processed in 0.084051 second(s), 27 queries .

Powered by Discuz! X3.2

© 2001-2024 Comsenz Inc.

快速回复 返回顶部 返回列表