MSFlexGrid 是微软的 ActiveX 表格控件,功能强大,在 VB 编程中经常使用。
<!-- [if gte vml 1]><v:shapetype id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t" path="m@4@5l@4@11@9@11@9@5xe" filled="f" stroked="f"> <v:stroke joinstyle="miter"/> <v:formulas> <v:f eqn="if lineDrawn pixelLineWidth 0"/> <v:f eqn="sum @0 1 0"/> <v:f eqn="sum 0 0 @1"/> <v:f eqn="prod @2 1 2"/> <v:f eqn="prod @3 21600 pixelWidth"/> <v:f eqn="prod @3 21600 pixelHeight"/> <v:f eqn="sum @0 0 1"/> <v:f eqn="prod @6 1 2"/> <v:f eqn="prod @7 21600 pixelWidth"/> <v:f eqn="sum @8 21600 0"/> <v:f eqn="prod @7 21600 pixelHeight"/> <v:f eqn="sum @10 21600 0"/> </v:formulas> <v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/> <o:lock v:ext="edit" aspectratio="t"/> </v:shapetype><v:shape id="_x0000_i1025" type="#_x0000_t75" style='width:341.25pt; height:287.25pt'> <v:imagedata src="file:///C:/DOCUME~1/testware/LOCALS~1/Temp/msohtml1/01/clip_image001.png" mce_src="file:///C:/DOCUME~1/testware/LOCALS~1/Temp/msohtml1/01/clip_image001.png" o:title=""/> </v:shape><![endif]--><!-- [if !vml]--><!-- [endif]-->
QTP 录制下来的脚本通常如下所示:
VbWindow("Form1").Activate
VbWindow("Form1").AcxTable("MSFlexGrid").SelectRow 1
VbWindow("Form1").AcxTable("MSFlexGrid").Click 196,23
VbWindow("Form1").VbList("List1").Select "2 - com2"
VbWindow("Form1").AcxTable("MSFlexGrid").SelectRow 2
VbWindow("Form1").AcxTable("MSFlexGrid").Click 120,39
VbWindow("Form1").VbEdit("Text2").Set "100"
VbWindow("Form1").AcxTable("MSFlexGrid").SelectRow 4
VbWindow("Form1").AcxTable("MSFlexGrid").Click 145,69
VbWindow("Form1").VbEdit("Text2").Set "200"
VbWindow("Form1").AcxTable("MSFlexGrid").SelectRow 9
VbWindow("Form1").AcxTable("MSFlexGrid").Click 151,141
VbWindow("Form1").VbList("List1").Select "True"
VbWindow("Form1").VbButton(" 确定 ").Click
这样的脚本不仅冗长,而且与坐标值相关,因此难以维护,代码的重用性也不高。适当封装一下,则可以下面的更为优雅的方式来编写测试脚本:
VbWindow("Form1").AcxTable("MSFlexGrid").MSFlexGrid_SetValue "Settings",123
Msgbox VbWindow("Form1").AcxTable("MSFlexGrid").MSFlexGrid_GetValue("Settings")
只要适当研究一下 MSFlexGrid 控件的属性和方法,再加上 QTP 的 RegisterUserFunc 函数的使用即可完成封装。实现代码如下:
Function MSFlexGrid_GetValue( obj, PropertyName )
For i =1 to obj.RowCount
If obj.Object.TextMatrix(i,0) = PropertyName Then
PropertyValue = obj.GetCellData(i,1)
Exit For
End If
Next
MSFlexGrid_GetValue = PropertyValue
End Function
RegisterUserFunc "AcxTable","MSFlexGrid_GetValue","MSFlexGrid_GetValue"
Function MSFlexGrid_SetValue( obj, PropertyName, PropertyValue )
For i =1 to obj.RowCount
If obj.Object.TextMatrix(i,0) = PropertyName Then
PropertyValue = obj.SetCellData(i,1,PropertyValue)
Exit For
End If
Next
End Function
RegisterUserFunc "AcxTable","MSFlexGrid_SetValue","MSFlexGrid_SetValue"
自动化测试项目中的两大类难题是:
1 、测试脚本开发的管理问题
2 、测试脚本开发的技术问题
第一类难题主要通过采用各种脚本框架来解决,例如模块结构化框架、数据驱动框架、关键字驱动框架等。而第二类难题则主要靠自动化测试工程师通过开发 QtestWare 这样的测试对象级的框架来解决。