续上:http://www.51testing.com/index.php?uid-174770-action-viewspace-itemid-183675
七、 实例
透过上面与大家分享的理论知识,现在我们先挑个“软柿子”捏捏,这个就是SwfTable。我们打开QTP的帮助文档,看到文档中正好提示支持这个控件,DevExpressXtraGrid。如果使用这个控件,你或许会发现某些Table的方法它是不支持的,因为QTP没封装得很彻底的缘故。
1, 我们添加这某个Table进对象库,而我们Spy出来的type是DevExpress.XtraGrid.GridControl这个控件。
2, 使用.net Windows Forms Spy,查看这个对象,或者查看源代码与网上搜索相关代码,不难发现这个对象下面有一个MainView或者Views的对象,它就是存放了大部分对象的一个“容器”。而我们在API中看到,这个MainView其实包括了3种View类型:GridView,CardView,TreeView。
3, 而我们通过下面代码获取这个View是属于什么类型:
Swfwindow().swfTable().Object.MainView.getType.name
4, 到这里,你如果看到的这个View类型是属于CardView,那么QTP的.net插件
是没有封装这个的,它只封装了GridView。而CardView的最大特点就是Colum变成了Row,而Row变成了Colum.
5, 所以我们需要再一次把CardView这个View类型的方法与属性封装出来。
Public function GetCellPorp(SwftableObj,Row,Colunm,PropertyName)
View=SwftableObj.Object.MainView.getType.name
Select Case View
'由于QTP支持了这个对象的方法,我们就直接使用它方法,如果还想
Case "GridView"
GetCellPorp=SwftableObj.GetCellProperty(Row,Colunm,PropertyName)
Case "CardView"
'CardView的特点就是Column与rou相反,但为了更好的使用,我们需要在封装的时候再倒过来,让它适合我们的感知。
'再往下,我们需要分析出这个Row与Column的值,是字符串或是数字,如果是字符串需要做循环找出这个Column对象或者row的handle。
'Code省略
'接着我们需要在这个封装中添加进我们的PropertyName传参类型的分类
Select Case PropertyName
Case "Value"
'Code省略
Case "Colname"
'Code省略
End Select
Case "TreeView"
'Code省略
End Select
End Function
八、 结语
熟悉web自动化的人,觉得Web很简单,也很好做,因为我们够了解它,也能很轻松了解到它的构造,能够得心应手的操作它。但面对一个CS程序,完全的看不到代码和不了解的黑盒子,不了解它是如何运作的情况下,让我们觉得CS的自动化离我们太远了,希望读完这个文章能让您有所收获。
学习自动化测试是一个很漫长的过程,从理论到工具再深造理论再脱离工具的一个过程,除了项目进度关系要求使用工具外,我们应该多研究这个QTP是如何实现的,脱离它才是我们需要得到本事,试着去了解Window或者其它操作系统后台工作原理,离开了工具,你也能造出车来,这也是我们能在工作与项目组中处于不可替代的位置。