51Testing软件测试论坛
标题:
自动化测试 - RFT系列教程5:RFT是如何识别控件的(三) TestObject的种类:Mapp...
[打印本页]
作者:
always_fly
时间:
2019-1-24 15:50
标题:
自动化测试 - RFT系列教程5:RFT是如何识别控件的(三) TestObject的种类:Mapp...
什么是TestObject?TestObject可以被认为是一个连接点,它把RFT脚本和被测控件很好的连接起来,让用户看起来操作TestObject就好像操作被测控件一样。
RFT里面主要有两类TestObject: 一个是Mapped,另一个是Bound(也被称作Found, Registered)
Mapped TestObject
Mapped TestObject一般都是通过一些必要的属性信息来定位一个真实的被测控件,我们之前接触到的TestObject都是Mapped
一般这些属性信息都存储在TestObject Map里面,各个TestObject是以树状结构保存
比如一行脚本button().click(),RFT在执行的时候首先先从TestObject Map里面读取button的关键属性信息,然后通过这些信息寻找匹配的控件,当寻找到匹配控件并且唯一时生成相应的Bound TestObject,然后由Bound TestObject执行click操作,最后再释放掉Bound TestObject
从代码层面,button().click()相当于如下代码
//通过属性信息查找控件,并生成Bound TestObject
GuiTestObject buttonBTO = button().find();
//执行click操作
buttonBTO.click();
//注销该Bound TestObject
buttonBTO.unregister();
复制代码
Bound TestObject
一切不是通过TestObject Map里面的属性查找到的TestObject都是Bound TestObject
Bound TestObject才是真正联系RFT脚本和被测控件的连接点,我个人认为它应该相当于各类Proxy(后面我们谈到RFT的扩展会详细讲解Proxy)
可以直接返回Bound TestObject的方法如下: getChildren(), getMappableChildren(), getOwned(), getParent(), getMappableParent(), getOwner(), find(), getTopParent()
Bound TestObject和Mapped最大区别就是Mapped TestObject会自动unregister,但是Bound TestObject必须要手动unregister,这就像我们在写数据库相关代码的时候要时刻记的关闭connection一样,一般都会把关闭connection写在finally里面,比如:
TestObject BTO = mappedObject.find();
try
{
// 在try里面试行操作
BTO.click();
}catch(Exception e){
// 异常处理
}finally
{
//最后要注销该Bound TestObject
TO.unregister();
}
复制代码
欢迎光临 51Testing软件测试论坛 (http://bbs.51testing.com/)
Powered by Discuz! X3.2