RFT API学习之——TestObject

.lang.
做为一个“祖宗”级别的类,它所提供的方法很多,功能也很强大,本文就开发测试脚本中常用到的几个方法做一个介绍 。
方法一
()
被测对象调用该方法后,RFT自动在当前窗口中进行查找,如果找到匹配对象则返回true,否则返回false,如果找到多个匹配的候选值,同样返回true 。该方法一旦执行,便在当前窗口进行匹配查找,即使找不到,也不会等待该对象的出现,也不会抛出任何异常信息 。比如在启动的时候,我们编写如下测试脚本 。
//启动
("start");
//判断对象form()在当前窗口中是否存在 。
.out.(form().());
//(100.0,1.0),等待被测对象出现,最长等待时间100秒,每秒钟
//尝试一次,如果找到form()对象,则继续往下执行 。
form().(100.0,1.0);
//判断对象form()在当前窗口中是否存在 。
.out.(form().());
执行完这段脚本后,我们会在控制台看到这样的信息——
说明:在第一次调用()方法时,还没有起来,所以返回false,当第二次调用该方法的时候,由于前面已经调用了()方法,阻止当前脚本的继续执行,直到form对象出现,所以返回true 。
方法二
[]find()
find方法可以实现在运行时,动态地在被测应用程序(,AUT)中定位,通过使用它,您可以避免不得不记录动作以向对象地图()中添加对象 。
在RFT中,被映射的对象使用被存储的、静态的、识别属性和对象层次来验证回放过程中脚本是否使用了正确的控件 。虽然使用被记录的对象进行对象识别速度很快,但是更新属性却是费时的,特别是当您需要将对象的属性权值,或者文本属性变更为正则表达式(,Regex)值时 。find方法向您提供一种能够排除大多数来自于对象地图的被记录控件的选项 。
find方法在RFT的当前版本(8.0)中已经非常成熟,其性能几乎与使用映射对象的性能相同 。该方法可以根据指定的查询条件,搜索所有匹配的对象,并将搜索到的结果放入[]数组中返回 。其中查询条件的设置通常有以下三种格式:
1、搜索所有直接的子对象 。
2、寻找的所有子对象 。
3、让您指定一个、,和对象的列表,这样可以进一步减小搜索的范围,提高搜索效率和准确性 。
前面我们提到过:“每一个被测软件上的对象都可以映射为RFT上的一个对象 。”,也就是说,是所有被测试对象的父类,所以我们可以用任何一个被测对象来调用find方法 。这依赖于所选择的对象,搜索只限于您所选择的对象下面层级的对象 。比如,在中,新建模型视图时(如图1所示),
图1-新建模型视图
需要输入文件名称(),然后点击【】按钮,这两个动作虽然都可以通过录制脚本来实现,但是鉴于静态识别存在的固有的缺陷,此处我们使用find方法来动态查找,并执行相应的动作 。首先,我们可以借助于RFT提供的对象查找器来获取各对象的识别属性 。
图2-新建模型视图窗口对象识别属性
图3-文件名输入域对象识别属性
图4-按钮对象识别属性
获取到各对象的信息后,下面我们就可以利用这些属性信息动态的进行对象的识别了(说明:每一个测试对象都包含有若干个识别属性,在实际使用时,我们要学会取舍,在识别时,只使用该对象特有的属性,比如要查找“新建模型视图”窗口,我们在find方法中,只需提供“.”属性值即可 。) 。
【RFT API学习之——TestObject】要想快速准确的查找到“文件名输入域”和“按钮”,我们需要先找到其父对象,然后,再用父对象调用find方法进行查找 。(说明:此处我们也可以不通过父对象,直接查找“文件名输入域”和“按钮”,但是,这样的话,我们就不能保证结果的唯一性,也就是说,如果在其他窗口也存在这两个对象的话,我们就不好区分哪一个是我们需要的,所以,为了严谨起见,我们通过父对象查找子对象的方式来进行,在实际编写测试脚本时,可以根据具体情况分别对待 。)