RFT API初涉——之解决RFT无法识别windows对话框的问题
在用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(RIGHT, atPoint(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对话框的问题相关推荐
- 在使用postman中操作api接口测试403解决方法
在使用postman中操作api接口测试403解决方法 参考文章: (1)在使用postman中操作api接口测试403解决方法 (2)https://www.cnblogs.com/xiaoyayu ...
- 请求处理传入原生的API || 请求处理CharacterEncodingFilter解决乱码问题
请求处理传入原生的API 请求处理CharacterEncodingFilter解决乱码问题 提交的数据可能有乱码: <!-- 配置一个字符编码的Filter:一定注意:字符编码filter一般 ...
- CV之API:利用Face++的人体识别接口,实现摄像头实时手势识别
CV之API:利用Face++的人体识别接口,实现摄像头实时手势识别 目录 测试图片 实现代码(部分) 测试图片 实现代码(部分) #利用Face++的人体识别接口,实现摄像头实时手势识别 impor ...
- 商汤港理工提出基于聚类的联合建模时空关系的 GroupFormer 用于解决群体活动识别问题,性能SOTA...
关注公众号,发现CV技术之美 ▊ 写在前面 群体活动识别是一个关键而又具有挑战性的问题,其核心在于充分探索个体之间的时空交互,产生合理的群体表征 .然而,以前的方法要么分别建模空间和时间信息,要么直接 ...
- Ubuntu/Mac彻底解决手机ADB识别问题
Ubuntu/Mac彻底解决手机ADB识别问题 参考文章: (1)Ubuntu/Mac彻底解决手机ADB识别问题 (2)https://www.cnblogs.com/benhero/p/428725 ...
- Xcode真机调试中“There was an internal API error“错误解决方法
Xcode真机调试中"There was an internal API error"错误解决方法 参考文章: (1)Xcode真机调试中"There was an in ...
- 【问题解决】解决eclipse不识别Android手机的问题
[问题&解决]解决eclipse不识别Android手机的问题 参考文章: (1)[问题&解决]解决eclipse不识别Android手机的问题 (2)https://www.cnbl ...
- jQuery ajax 结合vue 获取豆瓣api 数据 ,jsonp解决跨域
jQuery ajax 结合vue 获取豆瓣api 数据 ,jsonp解决跨域 <!DOCTYPE html> <html><head><meta chars ...
- 计算机无法识别苹果手机,如何解决电脑无法识别iphone的问题?
吴川 华南区技术负责人 概要 当我们想要给iPhone做一个全面的备份时,就需要连接手机到PC上.但有一些用户可能会遇到电脑无法识别iphone的问题,这该如何解决呢?不用着急,本文将分析PC无法识别 ...
- 台式计算机usb口不识别鼠标,如何解决计算机无法识别鼠标的问题
在生活中,将鼠标连接到USB端口时,无法识别鼠标. 我该怎么办?然后,让我们向编辑器学习,以告诉您计算机无法识别鼠标的解决方案. 希望我能为您服务! 计算机无法识别鼠标解决方案之一: 1. 首先检查设 ...
最新文章
- linux启动运行级别上机,linux的启动及其运行级别
- Scrapy -- 05
- SignalTap II逻辑分析仪的使用
- 堆载预压弹性变形怎样计算公式_一种风洞洞体堆载预压变形测量工艺的制作方法...
- QT次线程连接数据库
- Hadoop为什么没有采用RAID?
- 用python写一个除法的函数_2、Python基础--除法、常用数学函数
- SpringBoot基础教程2-1-6 日志规范-使用AOP统一处理Web日志
- 老生长谈的$.extend()方法
- 2020年下半年软件设计师上午真题及答案解析(个人见解+网络解答+持续更新)
- Face3D学习笔记(4)3DMM示例源码解析【中上】3DMM模型
- 插头DP~(。。。了解了一下下)
- CMakeLists写法总结
- 1068 万绿丛中一点红 (20 分)测试点3、5
- secureCRT上传CentOS镜像
- Android发送短信的两种方法
- SPH算法简介(一): 数学基础
- [转帖]超能网 主板类型
- Windows7下安装Docker、下载镜像和运行OpenTsdb容器
- 图书馆座位预约系统,图书馆座位管理系统,图书馆座位预约毕业设计
热门文章
- 一元二次方程的解的程序
- php7cms手册,phpcms手册下载|
- 最火照片墙前端纯HTML(只需添加照片)
- nextpolish安装_Polish安装问题
- obj[key].obj['key'],obj.key的区别
- css修改鼠标指针的样式
- linux中cp: omitting directory `XXX' 问题解决
- p5140大吉大利 晚上吃鸡
- KVM安装+vlan配置(超详细)
- 《X战警:逆转未来》热映 破福斯海外开画纪录