RFT API初涉——之解决RFT无法识别windows对话框的问题

在用RFT录制的导出数据结构文档的操作时,RFT对象检查器无法识别windows“另存为”对话框,在网上几经搜寻,终于解决了这个问题。

问题描述:

在模型编辑窗口,任选一点右击,在弹出的右键菜单中选择【导出数据结构文档】,系统弹出“另存为”对话框。然而,对于“另存为”对话框进行的任何操作,比如,输入文件名称、点击【保存】,RFT都没有做任何的记录。也就是说测试对象检查器根本无法获取到该对象的任何属性,用find方法(动态识别对象的一种常用的方法)查找时也找不到任何的对象。使用的属性是“.name”,属性值是“另存为”。

解决方法:

RFT提供了访问windows平台控件的接口,那就是IWindow。既然我们不能通过TestObject类获取“另存为”对话框的属性,那么我们就把“另存为”对话框当成是一个windows对象,用IWindow来识别。步骤如下:

1、首先需要获取到“另存为”对话框对象,该对象的类型是IWindow,对象获取可以使用getText返回的属性,“另存为”对话框的getText会返回“另存为”。

2、调用IWindowinputChars方法输入将要导出的文件的名称。

3、获取到“另存为”对话框对象的子对象“保存”按钮,并执行点击操作。

为了实现以上的功能,我们需要首先写两个方法,分别是public IWindow getWindow(String sCaption)public IWindow getControl(IWindow iTopwin,String sCtrlText) 前者是用来查找windows窗口对象,后者是用来获得windows窗口对象上面的子对象,如文本框、按钮等。代码如下:

// 根据传入的windows对象属性,查找对应的windows对象并返回。

    //如果找不到则返回null

       public IWindow getWindow(String sCaption){

           IWindow[] wins=RationalTestScript.getTopWindows();

           IWindow current=null;

           int length=wins.length;

           for (int i = 0; i < length; i++) {

               current = wins[i];

               if(current.getText().matches(sCaption)){

                   return current;

               }   

        }

           return null;

       }

        //根据传入的窗口对象和子对象属性    查找并返回子对象,如果查找不到,

        //则返回null。  

       public IWindow getControl(IWindow iTopwin,String sCtrlText){

           if(iTopwin==null){

               System.out.println("传入的windows对象为空");

               return null;

           }

           //getChildren()方法返回该对象的所有子对象的数组。

          IWindow[] windows=iTopwin.getChildren();

          IWindow current=null;

          int length=windows.length;

          for (int i = 0; i < length; i++) {

               current = windows[i];

               if(current.getText().contains(sCtrlText)){

                   return current;

               }

        }

           return null;

       }  

编写好上面两个方法后,我们就可以在测试脚本中进行调用了,测试脚本如下:

public void testMain(Object[] args) {

        //上面所写的getControl()和getWindow()方法单独写在了Tools类中,

        //所以在此需要先创建Tools的对象。

        Tools tool = new Tools();

        classDiagramEditPartClassDiagr().click(atPoint(326, 93));

        classDiagramEditPartClassDiagr().click(RIGHTatPoint(326, 93));

        contextMenu().click(atPath("导出数据结构文档"));

        //利用find()方法进行查找名称为“另存为”的windows窗口对象。

        TestObject temp[]=find(atDescendant(".name","另存为"));

        if(temp.length==0){

            System.out.println("找不到.name是另存为的窗口对象");

        }

        //调用getWindow()方法,查找并返回名称为“另存为”的窗口对象。

        IWindow topwindow = tool.getWindow("另存为");

        //调用getControl()方法,查找并返回指定的窗口子对象。

        IWindow file_name = tool.getControl(topwindow, "文件名");

        if (file_name != null) {

            // 点击文件保存文本框,将焦点定位于文件名输入框中。

            file_name.click();

            //输入要导出的文件的名称

            topwindow.inputChars("导出数据结构文档测试");

        }

        //调用getControl()方法,查找并返回对象“查找”按钮。

        IWindow button_save = tool.getControl(topwindow, "保存(");

        if (button_save != null) {

            //点击【保存】按钮

            button_save.click();

            //不定长等待,最长等待时间20秒,每秒钟尝试一次,

            //如果找到ok()对象,则继续往下执行。

            ok().waitForExistence(20, 1);

            //保存成功

            ok().click();

        }

    }

测试脚本编写完成后,运行,顺利通过。

小结:

通过解决这个问题经历,初步认识到RFT提供的API重要性,在RFT中,所有的类和方法都已经提供了,只是由于自己不熟悉RFT类库的使用方法(比如,IWindow的用法),所以碰到这种问题的时候,往往不知所措,走了不少的弯路,其实不仅仅是保存对话框,任何windows平台的控件,我们都可以用IWindow来实现查找和定位,以此为契机,以后对RFT的类库做进一步的研究和学习。

 

 

参考文章:<<RFT无法识别windows对话框的处理方法>> URL:http://www.51testing.com/?uid-31621-action-viewspace-itemid-86527

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值