sypm 发表于 2008-8-19 16:25:58

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

一个案例,其中有一个界面会随机弹出一个对话框,请问我用RFT怎么去识别这个对话框是否存在或是不存在如何返回一个NULL或其它可以识别的值?

sypm 发表于 2008-8-20 10:49:54

:( ,有人回答我吗?

dreamever 发表于 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;
        }

lovetest6 发表于 2008-9-27 16:38:46

楼上的代码和RFT本身的wait实现差不多,那个实现略完整。

sypm 发表于 2008-9-28 16:53:48

我用下面的方法根本找不到对象,请问这是为什么啊?每次返回的长度都是0,所以dreamever给我的代码我根本没办法用
RootTestObject root = getRootTestObject();                
TestObject[] to = root.find(atDescendant ("name", "筛选数据失败,请稍后再试或重新登入程序再试!"));
                System.out.println (to.length);
http://img.photo.163.com/mSrkxfv9aBHSjWUCh_B3Mw==/1966384187301032973.jpg

http://img.photo.163.com/z55ssjWd92jHoidM8jJvDg==/1966384187301032955.jpg

sypm 发表于 2008-10-6 11:33:23

请问这个问题怎么解决啊?有人帮助我吗?

sypm 发表于 2008-10-8 11:29:57

来人啊!!!!求助啊!版主帮忙想办法啊

z554308576 发表于 2008-10-9 14:02:20

查看http://www.ibm.com/developerworks/cn/rational/r-cn-extendsrftobj/?S_TACT=105AGX52&S_CMP=NL&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();
                                       
                               }
                       }       
        }

billwf120 发表于 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);

sypm 发表于 2008-10-16 15:18:28

回复 9# 的帖子

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

sypm 发表于 2008-10-16 18:14:01

苍天啊,大地啊!问题解决了,原来我装了一个RFT8.0版本,这段代码运行不成功,换成7.0.1就好了,呵呵,谢谢大家!:)

billwf120 发表于 2008-10-20 17:25:25

回复 11# 的帖子

7.0.1也有些问题,比如我写在这里的: http://bbs.51testing.com/thread-129221-1-1.html
换成7.0就没问题了:(
页: [1]
查看完整版本: 请问RFT怎么去识别一个弹出的对话框是否存在?