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()相当于如下代码

  1. //通过属性信息查找控件,并生成Bound TestObject
  2. GuiTestObject buttonBTO = button().find();
  3. //执行click操作
  4. buttonBTO.click();
  5. //注销该Bound TestObject
  6. 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里面,比如:

  1. TestObject BTO = mappedObject.find();
  2. try
  3. {
  4. // 在try里面试行操作
  5. BTO.click();
  6. }catch(Exception e){
  7. // 异常处理
  8. }finally
  9. {
  10. //最后要注销该Bound TestObject
  11. TO.unregister();
  12. }
复制代码







欢迎光临 51Testing软件测试论坛 (http://bbs.51testing.com/) Powered by Discuz! X3.2