51Testing软件测试论坛

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

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 4727|回复: 11
打印 上一主题 下一主题

请问RFT怎么去识别一个弹出的对话框是否存在?

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2008-8-19 16:25:58 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
一个案例,其中有一个界面会随机弹出一个对话框,请问我用RFT怎么去识别这个对话框是否存在或是不存在如何返回一个NULL或其它可以识别的值?
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

该用户从未签到

2#
 楼主| 发表于 2008-8-20 10:49:54 | 只看该作者
,有人回答我吗?
回复 支持 反对

使用道具 举报

该用户从未签到

3#
发表于 2008-8-23 11:55:02 | 只看该作者
可以用一个while循环来判断。首先这个对话框应该有一个我们可以进行识别的属性。在识别时我们需要实现如下需求,如果对话框存在,则返回true;如果不存在则等待5秒,如果在5秒内能等待到这个对象,则返回true,否则返回false。
我们创建方法public boolean isDialogExists(String id,string value)来实现,其中id和value 是我们用来识别对话框的属性
该方法的实现应该类似于如下代码:
        public boolean isDialogExists(String id,String value){
            boolean flag = false;
            int time = 0;
            while(!flag && time < 5){
                    RootTestObject root = getRootTestObject();
                    TestObject[] to = root.find(atDescendant(id, value));
                    if(to.length != 0){
                            flag = true;
                    }else{
                            sleep(1);
                            time++;
                    }
            }
            return flag;
        }
回复 支持 反对

使用道具 举报

该用户从未签到

4#
发表于 2008-9-27 16:38:46 | 只看该作者
楼上的代码和RFT本身的wait实现差不多,那个实现略完整。
回复 支持 反对

使用道具 举报

该用户从未签到

5#
 楼主| 发表于 2008-9-28 16:53:48 | 只看该作者
我用下面的方法根本找不到对象,请问这是为什么啊?每次返回的长度都是0,所以dreamever给我的代码我根本没办法用
RootTestObject root = getRootTestObject();                
TestObject[] to = root.find(atDescendant ("name", "筛选数据失败,请稍后再试或重新登入程序再试!"));
                System.out.println (to.length);

[img]

[/img]
回复 支持 反对

使用道具 举报

该用户从未签到

6#
 楼主| 发表于 2008-10-6 11:33:23 | 只看该作者
请问这个问题怎么解决啊?有人帮助我吗?
回复 支持 反对

使用道具 举报

该用户从未签到

7#
 楼主| 发表于 2008-10-8 11:29:57 | 只看该作者
来人啊!!!!求助啊!版主帮忙想办法啊
回复 支持 反对

使用道具 举报

该用户从未签到

8#
发表于 2008-10-9 14:02:20 | 只看该作者
查看http://www.ibm.com/developerwork ... ;ca=dnl-cn-03052008

/        打开窗体
        //返回windows系统中顶层窗口的对象, gettopwindows(打开),返回打开窗口
        //topwindows可以执行inputchars()方法
        public IWindow getTopWindow(String objName){
                 IWindow[] wins = RationalTestScript.getTopWindows();// 返回windows对象数组
                 int length=wins.length;//获取长度
                 for(int i=0;i<length;i++){
                         if(wins.getText().matches(objName)){//标题
                                 return wins;
                                 
                         }
                 }
                return null;
                 
        }

//        返回打开按钮
        public IWindow getLevelWindow(String topWinName, String levelWinName) {   
                  
        IWindow winobjects = null;   
        IWindow[] wins=RationalTestScript.getTopWindows();// 返回windows对象数组   
   
        for (int i = 0; i < wins.length; i++) {// 在数组中查找所有符合topWinName属性的对象   
   
            if (wins.getText().equals(topWinName)) {   
   
                winobjects = wins;   
   
            }   
   
        }   
   
        IWindow[] winobj = winobjects.getChildren(); //识别打开按钮   
   
        for (int i = 0; i < winobj.length; i++) {   
   
            if (winobj.getText().equals(levelWinName)) {// 在顶层对象中,查找符合levelName属性的对象   
   
                return winobj;   
   
            }   
   
        }   
   
        return null;   
   
    }


放到TASKS里面的
//打开文件对话框
        public void setopen(String fo){
    a.getHtml_theFile().click(atPoint(164,6));//路径
    IWindow n=a.getTopWindow("选择文件");
        //必须判断
         if(n!=null){
                 IWindow m=a.getLevelWindow("选择文件","打开(&O)");//返回按钮
                 if(m!=null){
                        a.getLevelWindow("选择文件", "文件名(&N):").click();//点击文件保存文本框,获取焦点.
                         a.getTopWindow("选择文件").inputChars(fo);
                         m.click();
                         
                 }
         }
        }
        //取消
        public void clo(){
                   a.getHtml_theFile().click(atPoint(164,6));//路径
                    IWindow n=a.getTopWindow("选择文件");
                        //必须判断
                         if(n!=null){
                                 IWindow m=a.getLevelWindow("选择文件","取消");//返回按钮
                                 if(m!=null){
                                         m.click();
                                         
                                 }
                         }       
        }
回复 支持 反对

使用道具 举报

该用户从未签到

9#
发表于 2008-10-14 13:33:01 | 只看该作者
RootTestObject root = getRootTestObject();               
TestObject[] to = root.find(atDescendant ("name", "筛选数据失败,请稍后再试或重新登入程序再试!"));
                System.out.println (to.length);

属性名前要加上句号在一个你这段汉字文字标点有问题,中间用英文的逗号,最后用了汉字的感叹号。这个值你最好到map里面copy一下。

RootTestObject root = getRootTestObject();               
TestObject[] to = root.find(atDescendant (".name", "筛选数据失败,请稍后再试或重新登入程序再试!"));
                System.out.println (to.length);
回复 支持 反对

使用道具 举报

该用户从未签到

10#
 楼主| 发表于 2008-10-16 15:18:28 | 只看该作者

回复 9# 的帖子

billwf120 ,你好,谢谢你提供方法,但你的方法我都试过了,而且我的那段文字是从属性里COPY过来的!所以我才不解
回复 支持 反对

使用道具 举报

该用户从未签到

11#
 楼主| 发表于 2008-10-16 18:14:01 | 只看该作者
苍天啊,大地啊!问题解决了,原来我装了一个RFT8.0版本,这段代码运行不成功,换成7.0.1就好了,呵呵,谢谢大家!
回复 支持 反对

使用道具 举报

该用户从未签到

12#
发表于 2008-10-20 17:25:25 | 只看该作者

回复 11# 的帖子

7.0.1也有些问题,比如我写在这里的: http://bbs.51testing.com/thread-129221-1-1.html
换成7.0就没问题了
回复 支持 反对

使用道具 举报

本版积分规则

关闭

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

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

GMT+8, 2024-11-9 06:26 , Processed in 0.068172 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2024 Comsenz Inc.

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