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

问题描述:

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

解决方法:

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

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

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

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

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

  1. 在使用postman中操作api接口测试403解决方法

    在使用postman中操作api接口测试403解决方法 参考文章: (1)在使用postman中操作api接口测试403解决方法 (2)https://www.cnblogs.com/xiaoyayu ...

  2. 请求处理传入原生的API || 请求处理CharacterEncodingFilter解决乱码问题

    请求处理传入原生的API 请求处理CharacterEncodingFilter解决乱码问题 提交的数据可能有乱码: <!-- 配置一个字符编码的Filter:一定注意:字符编码filter一般 ...

  3. CV之API:利用Face++的人体识别接口,实现摄像头实时手势识别

    CV之API:利用Face++的人体识别接口,实现摄像头实时手势识别 目录 测试图片 实现代码(部分) 测试图片 实现代码(部分) #利用Face++的人体识别接口,实现摄像头实时手势识别 impor ...

  4. 商汤港理工提出基于聚类的联合建模时空关系的 GroupFormer 用于解决群体活动识别问题,性能SOTA...

    关注公众号,发现CV技术之美 ▊ 写在前面 群体活动识别是一个关键而又具有挑战性的问题,其核心在于充分探索个体之间的时空交互,产生合理的群体表征 .然而,以前的方法要么分别建模空间和时间信息,要么直接 ...

  5. Ubuntu/Mac彻底解决手机ADB识别问题

    Ubuntu/Mac彻底解决手机ADB识别问题 参考文章: (1)Ubuntu/Mac彻底解决手机ADB识别问题 (2)https://www.cnblogs.com/benhero/p/428725 ...

  6. Xcode真机调试中“There was an internal API error“错误解决方法

    Xcode真机调试中"There was an internal API error"错误解决方法 参考文章: (1)Xcode真机调试中"There was an in ...

  7. 【问题解决】解决eclipse不识别Android手机的问题

    [问题&解决]解决eclipse不识别Android手机的问题 参考文章: (1)[问题&解决]解决eclipse不识别Android手机的问题 (2)https://www.cnbl ...

  8. jQuery ajax 结合vue 获取豆瓣api 数据 ,jsonp解决跨域

    jQuery ajax 结合vue 获取豆瓣api 数据 ,jsonp解决跨域 <!DOCTYPE html> <html><head><meta chars ...

  9. 计算机无法识别苹果手机,如何解决电脑无法识别iphone的问题?

    吴川 华南区技术负责人 概要 当我们想要给iPhone做一个全面的备份时,就需要连接手机到PC上.但有一些用户可能会遇到电脑无法识别iphone的问题,这该如何解决呢?不用着急,本文将分析PC无法识别 ...

  10. 台式计算机usb口不识别鼠标,如何解决计算机无法识别鼠标的问题

    在生活中,将鼠标连接到USB端口时,无法识别鼠标. 我该怎么办?然后,让我们向编辑器学习,以告诉您计算机无法识别鼠标的解决方案. 希望我能为您服务! 计算机无法识别鼠标解决方案之一: 1. 首先检查设 ...

最新文章

  1. linux启动运行级别上机,linux的启动及其运行级别
  2. Scrapy -- 05
  3. SignalTap II逻辑分析仪的使用
  4. 堆载预压弹性变形怎样计算公式_一种风洞洞体堆载预压变形测量工艺的制作方法...
  5. QT次线程连接数据库
  6. Hadoop为什么没有采用RAID?
  7. 用python写一个除法的函数_2、Python基础--除法、常用数学函数
  8. SpringBoot基础教程2-1-6 日志规范-使用AOP统一处理Web日志
  9. 老生长谈的$.extend()方法
  10. 2020年下半年软件设计师上午真题及答案解析(个人见解+网络解答+持续更新)
  11. Face3D学习笔记(4)3DMM示例源码解析【中上】3DMM模型
  12. 插头DP~(。。。了解了一下下)
  13. CMakeLists写法总结
  14. 1068 万绿丛中一点红 (20 分)测试点3、5
  15. secureCRT上传CentOS镜像
  16. Android发送短信的两种方法
  17. SPH算法简介(一): 数学基础
  18. [转帖]超能网 主板类型
  19. Windows7下安装Docker、下载镜像和运行OpenTsdb容器
  20. 图书馆座位预约系统,图书馆座位管理系统,图书馆座位预约毕业设计

热门文章

  1. 一元二次方程的解的程序
  2. php7cms手册,phpcms手册下载|
  3. 最火照片墙前端纯HTML(只需添加照片)
  4. nextpolish安装_Polish安装问题
  5. obj[key].obj['key'],obj.key的区别
  6. css修改鼠标指针的样式
  7. linux中cp: omitting directory `XXX' 问题解决
  8. p5140大吉大利 晚上吃鸡
  9. KVM安装+vlan配置(超详细)
  10. 《X战警:逆转未来》热映 破福斯海外开画纪录