二、各个“积木”的功能与代码实现
1、ObjectRepositoryUtil。如果你想了解它能做什么,你可以先摸摸看对象库合并工具与对象库管理工具,你可以知道它能够导出,导出对象库,或者使用XML存储,对象复制,对象命名,对象查找,对象复制与粘贴等等。所以,你读起代码来,你会更容易理解它与吸收:
Dim ImageObj, PageObj, RepositoryFrom, RepositoryTo Set RepositoryFrom = CreateObject("Mercury.ObjectRepositoryUtil") Set RepositoryTo = CreateObject("Mercury.ObjectRepositoryUtil") RepositoryFrom.Load "C:\All.tsr" RepositoryTo.Load "C:\Only.tsr" Set ImageObj=RepositoryFrom.GetAllObjects.item(3) 'From对象库的Iamge对象 Set PageObj =RepositoryTo.GetAllObjects.item(1) 'To对象库的Page对象 RepositoryTo.AddObject ImageObj,PageObj,"AA" '把这个Image粘贴到这个To 对象库Page下面,并命名为AA RepositoryTo.Save |
2、RepositoriesCollection。这个主要用途就是让脚本在跑的过程中,可以添加使用其它闲置对象库。这样当前的Action就能使用这个对象库中的对象,但是它同时也存在主次之分,就是本地对象库的优先级别是高过这个调进来的对象库。并且有点需要注意的是,本地对象库中,对象AA因为某些问题,QTP在应用程序中找不到,哪么QTP不会“乐意”再去这个调进来对象库中查找是有有匹配AA的对象,直接就抛个绝望的红XX给你。
RepPath = "C:\All.tsr" RepositoriesCollection.RemoveAll() RepositoriesCollection.Add(RepPath) |
3、Repository。当前运行Action的对象库,包括了外调对象库与本地对象库。
三、我们要如何拼这个“积木”让它“动”呢?它们的可行性?
方案一:
1、通过ObjectRepositoryUtil导出XML并实现准备好各个对象的XML片段,通过VBS操作来粘贴,并重新导入XML来实现动态添加对象。
2、RepositoriesCollection 导入刚才修改的对象库。
方案二:
1、在QTP9.5中,对象库是有自己的参数,也就是一个对象库有自己一个或者多个Parameters(参数)。可以在对象库管理期中设置。
2、在这个对象库中,把里面的某个对象参数化,与这个参数挂钩。完成了“独立对象库参数化”的操作。使用代码如下:
RepPath = "C:\All.tsr" RepositoriesCollection.RemoveAll() RepositoriesCollection.Add(RepPath) msgbox browser("百度一下,你就知道").Page("百度一下,你就知道").Link("新 闻").GetROProperty("Text") ‘新闻 Repository("AA")="贴 吧" msgbox browser("百度一下,你就知道").Page("百度一下,你就知道").Link("新 闻").GetROProperty("Text") ‘贴吧 |
3、在这个独立的对象库中,建立多个对象,例如WebEdit,Link,Image等等,把关键的设别属性都挂接起来。
4、区别与方案一,我们需要用2个对象库,一个就是刚才新建出来的“样板”对象库,这另一个,是来存储我们的“成品”对象。而这些成品对象,就是通过我们的场景恢复搭建起来的。(后面详解)