上回书说道Object,这次还是要说下Object,只是我们换个方式来定义.我们定义几个登陆百度的时候需要的object。比如 用户输入框,密码输入框,和登陆button等。
前面我们知道可以用object map来记录object,不管共有还是私有.这次我们会用到find方法.直白的说有点像遍历,对于一些我们没法预先定制的object,就可以使用到find方法,很方便,但是会更多的占用系统的资源,一利必有一弊.
来个例子吧比如我们想定义个 用户名的field,看看object map中的属性,下图:
我们可以看到这个object的属性.让我们想想,每个object的区别就在于属性,我们想让工具按照我们的定义操作,就需要设定一个唯一的object,不然RFT会很迷惑,不知道你到底喜欢那个,所以在实际的工作中,object的定义也需要注意,在同一个操作的页面定义的object一定要唯一,而对于不同的界面也不是必须的,因为很多的object的属性是重复的,就像一个OK的button,太有可能每个界面都会有,因此这样的object是可以重用的.对于object定义的计划和安排,我的用法是,按照每个页面为单位来定义,把对应于一个页面的object收集到一起.来看看下面的例子 用户名object的定义:
这个方法就是我们建立的 用户名输入的object,我来解释一下都用到了什么,为什么这么写.
1.WTextField 是我自己定义的object 类,继承了TextGuiTestObject
当然你也可以用ibm提供的包定义好的object.
2.我们把object的属性,放在Property中来保存.能不能找到就要看你存放的属性是否正确,能不能唯一也在于此.Property 来自于com.rational.test.ft.script.Property.
3.如何去找就要用到ProjectUtility中的写好的getTestObject(p, 60)方法.ProjectUtility也是自己定义的工具类.让我们来看看getTestObject(p, 60)是怎么来寻找object的,看下图我们就知道,这里面就是用的find方法,我只是提供一种方式,其他的想法,还要大家自己去寻找,通过练习我想,你会很快的学会使用.
我来解释一下这个方法,输入的参数为 属性Property和时间(秒).首先我们拿到 操作的rootobject,也就是最顶层的object作为root,在这个root包含的范围内,去找出你指定属性的object,并将找到的object返回,如果发现寻找的时候制定的属性不唯一,就会抛出一个异常,说明发现不止一个object,最关键的就在root.find(RationalTestScript.atDescendant(p)).直接套用即可.必须说明使用find方法,有时候会很好用最大程度的不依赖map,但是也需要消耗相当的时间,请按照实际情况使用.如果发现消耗很多,可以使用unregister掉find找到的testobject.注意:上面的提供的class和方法,不需要你建立脚本去使用,而只需要建立个基本java文件就可以解决.
上面提供给大家的是一种完全脱离object map的定义方式.找到object的方式有很多种,如果我们要定义个ok的button,但是一个界面上却有好几个ok的button,如何去让RFT定位到你想要的那个ok的button那?如果在界面上有一个panel(div),里面有些动态的link,我们却完全不知道link显示为什么,改如何去实现分别点击这些link那?
对应于object的操作方法也有很多,比如click(),settext(),getText(),select(),等等,我在这里并不像挨个给大家演示一遍,其实你只需要得到你想要的Testobject,让后把他转化为GuiTestObject 或者TextGuiTestObject等等,在使用RFT定义好的方法去实现就可以啦,这些也许只是java的基本API使用.
在这篇短文的结尾,我只想表达,不要怕出错,大胆的去尝试吧.出错了恰恰是你成长的开始.我们要实用,不要忽悠.
鼓足 勇气,勇往直前!