【软件自动化测试-QTP实战技能 25】== QTP_DataTable

一:

     'Methods of getting a Data Table value

     val = DataTable.Value("ParamName",dtGlobalSheet)

     val = DataTable.Value("ParameName","Global")

   

     '

 二:


1、DataTable方法GetRowCount7 L, c! x; I1 H- q2 M) q

   DataTable.GetSheet("Action1").GetRowCount   //获取总行数 0 ?" l, v* l0 h4 ?
  使用如:
$ i. m! v$ M3 k
  CountNum=DataTable.GetSheet("Action1").GetRowCount
$ F- c" R& L4 U3 \1 U
3 G1 z. v! H1 P
2、DataTable方法SetNextRow
   DataTable.GetSheet("Action1").SetNextRow     //取得下一行
   DataTable.SetCurrentRow(n)   //取得某一行
* m4 c- A# t) v0 \- I8 O; J  ?

3、DataTable方法GetCurrentRow    //获得当前行数
   例如:DataTable.GetCurrentRow

4、获取DataTable值
   4.1  DataTable("p_Text", dtLocalSheet)  //取得DataTable中参数名称为:p_Text的值
. Q! S4 Y/ T) m6 }6 l. j# ]  r3 c
   4.2  DataTable.GlobalSheet.GetParameter("p_Text").Value   //获取参数值方法和DataTable("p_Text", dtLocalSheet)一样
4 F) G' N# G. C( V9 {. B1 x
   例如:xname为变量,Dim xname
   xname=DataTable("p_Text", dtLocalSheet)
   xname=DataTable.GlobalSheet.GetParameter("p_Text").Value
9 @) o) v1 m5 r+ O' X# U1 r

5、DataTable.value("num")只在global形式下的一种省略形式;完整形式是:
         DataTable.value("num",dtlocalsheet)

-----向某一列的单元格赋值:
DataTable.value("column_name",dtlocalsheet)="nanjing"
8 m( c6 o  n, [  b
* e$ i7 l% O7 D/ [

7、获取对象属性名称用法:
; t8 E: K: ?' e) m; W7 Y# p0 X& e* _
GetRoProperty----从应用程序界面上获取对象属性(即,是脚本运行时,获取的对象动态属性值)
                 例如:获取对象库中index属性值,似乎只能用GetToProperty,因为应用程序界面上对象没有该属性,只是
5 }8 F  y( o0 Q3 Z; ^' R4 Q
                 QTP为识别该对象创立的描述属性;
# w8 b2 ?' Z/ R/ H. Z- ~& B
GetToproperty----从对象库中描述对象的属性,静态值
, ^- b2 {' U( N5 h
GetToProperties----获取用于标识对象的属性集;对于这个集合,有count等属性方法

8、如果弹出对话框就获取上面提示信息并与表中的信息对比,不统一证明弹出的提示出错,主要用来验证
  r/ `8 s$ [* k/ d& B
if browser("web_name").dialog("dialog_name").exIst(1) then'如果不出现=false
     error_message=browser("web_name").dialog("diaglog_name").static("用户密码错误!".getRoproperty("text")
- H, m" d4 S! a1 B7 u- ~8 g% E5 r
   if error_message<>(DataTable.value("error_info"))then
( C, x) U! J4 b& Y6 \2 e
         msgbox(error_message)
' o& f* |' \3 |/ o
      end if
6 [2 |( @% h& s
     browser("web_name").dialog("diaglog_name").close
  end if
4 O; H- s+ H1 a8 E/ _% q( M! V8 {
这里总结了两点技巧:
  一是:对于dialog中,虽然提示信息对象名称是"用户密码错误",但如果信息对象名称是“该用户不存在”,不用更改会自动识别,我想主要是录制第一遍时,“用户密码错误”只是让运行时能找到这个控制,而不管它是什么内容,因为在对象仓库中,text不是决定该对象的属性
. u# K2 y2 G( S. z
    二是:如果对于提示信息比较长的,可以用mid(error_message,n,m)取一部份特征提示信息进行验证,这样我想可以节省处理时间,又可以避免长度以及空格等字符的处理

9、数据库检查点模块:
- n# n' b# |0 {1 U: H& v
sub database_check
        set con=createobject("adodb.connection")
        con.open "Description=IBM_ODBC;DRIVER=SQL Server;SERVER=IBM;UID=sa;"&_
2 ~7 K! w2 R! h* U/ j  H1 Z
                         "PWD=123456;APP=Quick Test Pro;WSID=IBM;DATABASE=IBM_table"
        'access方式:con.open "DRIVER={Microsoft Access Driver (*.mdb)};DBQ=d:\test.mdb"
# e4 d! Z- F: \
        'Orocle方式:con.open "DRIVER={Oracle in OraHome92};SERVER=CESHI;UID=CND_TEST;PWD=CND;DBQ=CESHI;DBA=W;APA=T;EXC=F;XSM=Default;FEN=T;QTO=T;FRC=10;FDL=10;LOB=T;RST=T;GDE=F;FRL=Lo;BAM=IfAllSuccessful;MTS=F;MDI=Me;CSR=F;FWC=F;PFC=10;TLO=O;"
        set record=createobject("adodb.recordset")
2 T/ [, i- Z$ [% K) |
        sql="select*from ibm_one_table"
8 Y# w% E0 H' D" T5 T
        record.open sql,con
) w1 X$ Q: z% O* q0 r6 Z% d# S
                DO
/ D/ q* O6 {# b( A
                        if(record("ibm_table_column")="kai")then'//查找表格中有多少kai
, o7 m3 q3 |. j
                                num=num+1;
                        end if
! }# m- }8 ]' K. Y' Q  x+ `
                        record.movenext
) s$ x# d3 F  M0 K
                loop until record.eof=true
                record.close
# |! b$ R8 G' Z
        set record=nothing
        con.close
        set con=nothing
end sub
8 D$ s6 E5 {8 q

10、"Is+*"类型Function
% f3 j3 Y% e) \% o. V' K
Isarray                                                        '是否是数组
5 n/ y( r) A4 z- h
Isconnected                                        '判断QTP是否连接到TD
Isdate                                                        '是否是合法的日期类型
Isempty                                                        '判断是否初始化
IsNull                                                        '判断是否为空值
IsNumeric                                                '判断是否是数字型
7 M9 o3 t( ]  _( [
Isobject                                                '判断是否一个功能对象
$ x: J1 ]. a% w' p& ~; q( W
Isready                                                        '判断设备是否准备就绪
IsRootFolder                                '是否是根目录

11、for方法1,参数化时选择:dtLocalSheet
Dim CountNum
CountNum=DataTable.GetSheet("Action1").GetRowCount
For i=0 to CountNum-1
" `- ~" I" }( i. p
        DataTable.GetSheet("Action1").SetNextRow    //使用SetNextRow方法
Next
/ Y' H+ z/ H9 x# H. i

12、For方法2,参数化时选择:dtLocalSheet
+ z8 B. c& M9 t# L4 t- u
Dim countNum
) |* `2 J6 n- z! E. j2 N6 j7 o  n
countNum = DataTable.GetSheet("Action1").GetRowCount
For i=1 to countNum
7 ?' J( |, ^" S! U2 |9 d% i# y
        DataTable.GetSheet("Action1").SetCurrentRow(i)  //使用SetCurrentRow(i)方法
next
13、While方法1,参数化时选择:dtLocalSheet
) v6 ^' q% x) p8 }& L7 c. M% T
Dim CountNum,i
i=1
" ]  A. S% Z$ \
CountNum=DataTable.GetSheet("Action1").GetRowCount
While i<=CountNum
6 |1 x# H4 V" M6 a* e: l5 D3 a% @2 U
        DataTable.GetSheet("Action1").SetNextRow
4 H& u" Z; z  }" w
        i = i+1
1 ~1 z3 M9 m, |" \. {  E+ |+ ?
Wend
' g/ i3 G/ y: o6 U1 L3 F, k, @
! n3 \6 |- _) A7 R; l! T  m
14、while方法2,参数化时选择:dtLocalSheet
2 x- S0 a* }8 x; Y* p- Q
Dim CountNum,i
: [! b% g5 W- r+ G
i=1
$ S% I* |: R8 Q
CountNum=DataTable.GetSheet("Action1").GetRowCount
While i<=CountNum
        DataTable.GetSheet("Action1").SetCurrentRow(i)
        i = i+1
Wend
$ Y8 U# \# P0 I- n
( k/ r) }% y+ Z# @$ L
******************************************************************************************************************************

1: AddSheet 方法
描述         :向运行时数据表中添加指定工作表并返回该工作表,以便可以直接在同一语句中设置新工作表的属性。
0 r' v9 C' j8 @6 o+ }8 u% W8 A
语法         :DataTable.AddSheet(SheetName)
! I7 z8 {5 M7 a" i
示例         :
. Y' j- g1 t" h
先使用 AddSheet 方法在运行时数据表中新建工作表"MySheet",然后向新工作表中添加参数和删除参数。
Dim Variable
0 J4 L$ i% O: d3 C6 T  E
Variable=DataTable.AddSheet("MySheet").AddParameter("Time", "8:00")   '添加新表,并添加参数
9 q  m/ k) {, O3 J
DataTable.AddSheet("xya").DeleteParameter("Time")                                                                                  '指定表中的列

2:DeleteSheet方法
0 ~" s( a; `- W
描述         :从运行时数据表中删除指定工作表。
语法         :DataTable.DeleteSheet SheetID
# J& L. ]5 M, k" e7 |$ j
示例         :
$ v4 h3 Y" o9 a) }
使用 DeleteSheet 方法从运行时数据表中删除工作表"MySheet"。
DataTable.DeleteSheet "MySheet"

3:Export方法
描述         :在指定位置保存运行时数据表的副本。
  D3 U  s, L9 f4 P) Z+ \
语法         :DataTable.Export(FileName)
( |. s0 |9 ^1 Y  O' d* d
示例         :
使用 Export 方法将测试的数据表副本保存在 C:\flights.xls 中。
* y3 v& d/ l) m: ^3 b4 x3 R4 p
DataTable.Export ("C:\flights.xls")   '如果文件不存在,那么创建文件,如果文件存在,那么覆盖文件。
' N9 d& j9 g: @7 v$ @, f: I7 J
4:ExportSheet方法
描述         :        将运行时数据表的指定工作表导出到指定文件中。
3 q4 @& J/ O" T9 H5 S
                                  如果指定文件不存在,则将创建一个新文件并保存指定工作表。
/ F8 E# H1 @% c( Q: G
                                   如果当前文件存在,但是该文件不包含具有指定工作表名称的工作表,则将插入该工作表作为文件的最后一个工作表。
                如果当前文件存在且包含指定工作表,则导出的工作表将覆盖现有工作表。
语法         :        DataTable.ExportSheet(FileName, DTSheet)
                       DTSheet  变量  要导出的运行时数据表工作表的名称或索引。索引值从 1 开始。  
" j' }0 M- ?! d% R0 L# M- u
示例         :
) i3 e$ p, f3 O1 @  W6 |, \, Z
使用 ExportSheet 方法将运行时数据表的第一个工作表保存到 name.xls 文件中。
DataTable.ExportSheet "C:\name.xls" ,1
  a2 A+ N/ Q4 _) B
DataTable.ExportSheet "C:\name.xls" , "MySheet"
& Z& e- Z2 K8 M
name.xls表内容
  {" u3 K- s/ S9 z' x6 Y
' w2 S3 q$ k. X) E; \) X, W
5:GetCurrentRow方法
1 P( t7 ]7 y& c7 S! t5 f
描述                 :返回运行时数据表的第一个工作表(用于测试的全局表或用于业务组件的业务组件表)中的当前(活动)行。
语法                 :DataTable.GetCurrentRow
返回值         :数字
! O, p& k+ |( r, J* w: |1 [, A, K
示例          :
, ]1 i# C% H# Q% N7 @$ p* K
使用 GetCurrentRow 方法检索当前在运行时数据表中使用的行,并将其写入报告。
2 m$ T5 l7 f; K+ |
row = DataTable.GetCurrentRow                                                                              '获取Global Sheet页的当前行。
Reporter.ReportEvent 1, "行号", row
'获取指定Sheet的当前行
% k9 r( k' t& `2 k# z( e( [
rowcount=DataTable.GetSheet("xya").GetCurrentRow                 '获取指定Sheet页的当前行。
6:GetRowCount方法
9 ?* b( t4 x0 _! f) K" I* p" L) b
( f# P, _) e) T1 q' G  \
描述   : 返回运行时数据表的第一个工作表(用于测试的全局表或用于业务组件的业务组件表)中最长的列中的总行数。
' d6 P3 g7 u7 M2 d) |( u4 a
语法          : DataTable.GetRowCount
% M7 T6 t$ \, W+ D  ]: R) @, F
返回值 :        数字
& M6 E9 J: J' g5 l
示例   :
使用 GetRowCount 方法查找 MySheet 运行时数据表中最长的列中的总行数,并将其写入报告。
1 P* o  l% z: q  {  ^" v
rowcount = DataTable.GetSheet("MySheet").GetRowCount
4 L/ I! {! |6 I" k+ o
Str=DataTable.GetSheet("airline").GetParameter("CITIES").ValueByRow(i)
Reporter.ReportEvent 2, "数据工作表中有 " &rowcount, "行。"
* w  @5 y! A, K6 p* t3 Q
'获取DataTabel中指定sheet的总行数
  ~2 _  M/ j$ {( @7 v
rowcount=DataTable.GetSheet("xya").GetRowCount
msgbox rowcount
. X8 t4 z, o4 c5 o
7:GetSheet方法
* k1 o8 R+ W( V$ d4 O% i
描述                 :返回运行时数据表中的指定工作表。
语法                 :DataTable.GetSheet(SheetID) SheetID  变量  标识要返回的工作表。SheetID 可以是工作表名称或索引。索引值从 1 开始。  
, x% s& O# @* A2 v0 q& X. }
返回值         : DTSheet 对象
示例    :
使用 GetSheet 方法返回运行时数据表的"MySheet"工作表,以便向其中添加参数。
; T6 J) k( u0 y& Z
MyParam=DataTable.GetSheet ("MySheet").AddParameter("Time", "8:00")
您还可以使用该方法向"MySheet"本地表中添加参数(注意,不会返回值)。
) y: |3 l6 M' d4 M
DataTable.GetSheet ("MySheet").AddParameter "Time", "8:00"
DataTable.GetSheet (1).AddParameter "Time", "8:00"
" m1 O9 j' Z9 j  B3 g1 _1 y

8:GetSheetCount方法
描述                 : 返回运行时数据表中的总工作表数。
语法          :        DataTable.GetSheetCount
1 B& u( }/ a& R( }2 E: L
返回值         : 数字
! {$ {4 ^. q$ u1 K8 Y6 q
示例                 :
$ Y7 ^( ?6 z; E" N
使用 GetSheetCount 方法查找运行时数据表中的总工作表数,并将其写入报告。
: {' r6 R5 S/ `$ N# [/ o7 K, s
SheetCount = DataTable.GetSheetCount
Reporter.ReportEvent 0, "工作表编号", "数据表中有 " & SheetCount & " 个工作表。"
8 ]: _" X4 Z. Y. t) v8 Z

9:Import方法
描述         : 将指定的 Microsoft Excel 文件导入运行时数据表。  
5 c+ K0 I; [2 K& E- D, A
                          导入的表必须与测试或组件匹配。列名必须与测试或组件中的参数匹配,并且工作表名称(用于测试)必须与操作名匹配。
. K- {3 w4 `, H
                          如果导入的 Excel 表包含组合框或列表单元格、条件格式或其他特殊单元格格式,则不会导入这些格式,并且单元格在数据表中显示时包含固定值。
语法  : DataTable.Import(FileName)
  j: C/ H$ u% M8 I  E" ?- d9 U# e2 Q9 n4 t
        FileName  字符串型  要导入的 Excel 表的完整路径。  
示例  :
导入的表将替换现有运行时数据表(包括所有数据表)中的所有数据。
$ `4 r7 d( ]* _$ h4 a2 d* I
使用 Import 方法将 flights.xls 表导入运行时数据表。
; F! L! E. R3 h" C. F
DataTable.Import ("C:\flights.xls")
" b2 d" c( y' H1 K; J  l

10:ImportSheet方法
描述  : 将指定文件的工作表导入运行时数据表的指定工作表。导入的工作表中的数据将替换目标工作表中的数据(请参阅 SheetDest 参数)。
                           导入的工作表中的列标题必须与工作表导入操作中的数据表参数名匹配。否则,测试或组件可能会失败。
                                导入的工作表会自动采用它所替换的工作表的名称。
                                如果导入的 Excel 工作表包含组合框或列表单元格、条件格式或其他特殊单元格格式,则不会导入这些格式,并且单元格在数据表中显示时包含固定值。
语法  : DataTable.ImportSheet(FileName, SheetSource, SheetDest)
) a* W! Q* y! X# Q
                                FileName  字符串型  要从中导入工作表的 Excel 表的完整路径。  
8 M9 {* v& u! J6 y7 J
                                SheetSource  变量  要从文件导入的工作表的名称或索引。索引值从 1 开始。  
                                SheetDest  变量  数据表中要用 SheetSource 替换的工作表的名称或索引。索引值从 1 开始。  
示例        :  
8 Y  A' q, w' s' a* v
        使用 ImportSheet 方法将 name.xls 表的第一个工作表导入测试的运行时数据表中的Action1工作表。
        DataTable.ImportSheet "C:\name.xls" ,1 ,"Action1"              
        DataTable.ImportSheet "C:\name.xls" ,1 ,"Global"
        Qtp中不要使用Global表,会出现死循环现象。
        还可以先创建一个Sheet页,在导出文件
$ f, U; b* a- F+ R  K$ E* f# H: ^* V
        DataTable.AddSheet "airline"
5 L' G  V% K2 }
        '把文件中的sheet页面导出到datatable中的airline中
        DataTable.ImportSheet "c:\a.xls", "airline","airline"
7 u& H- b, j, H. O
11:SetCurrentRow方法
4 s" s  o0 P# Z% ~) ]( V+ Y7 s) p1 s
描述         :  在运行时数据表中将指定行设置为当前(活动)行。
注意        : 您只能设置至少包含一个值的行。
语法  :  DataTable.SetCurrentRow(RowNumber)
                                 RowNumber  数字  指明要设置为活动行的行号。第一行的编号为 1。
4 S2 i( h5 r' v
示例        :                          
: Q( D  l4 _! `0 g
DataTable.SetCurrentRow(1)                                                                                                   '设置默认Sheet页的当前行
DataTable.GetSheet("airline").SetCurrentRow(1)                        '设置指定Sheet页的当前行
7 X2 x: M# D: n& ]6 d
( _# U- Q! g- M* k- N
12. Value方法
描述         :  获取DataTable指定Sheet页的指定列的值。
0 a; ~+ Z$ |# C. T: O7 M3 x
语法  :  DataTable.Value(ParameterID [, SheetID])
示例        :
$ |( B1 G( M, B( X$ W0 {/ ?
Msgbox DataTable.Value("CITIES") '默认获取Global sheet的列CITIES的值
Msgbox DataTable.Value("CITIES","airline")
& K1 X& k- R0 I% [' P# b
-----向某一列的单元格赋值:
  I5 Z+ H8 d. Q& n+ w
DataTable.value("column_name",dtlocalsheet)="nanjing"
3 Q4 c5 Y" v% z; A- p1 ?
12. GetParameterCount方法
描述         : 得到DataTable运行时的动态列数:GetParameterCount
* r6 b' N( ]; a9 K0 U9 i
语法        :DTSheet.GetParameterCount      
. o* K+ R; n# ]  ?0 c+ C
示例        :
paramcount = DataTable.GetSheet("airline").GetParameterCount
paramcount = DataTable.GlobalSheet.GetParameterCount  '获取Global sheet的动态列数
; b; ?8 L, \4 U' S7 D- b' r
paramcount = DataTable.LocalSheet.GetParameterCount   '获取Aciton1 sheet的动态列数
  t7 q* ?# G; G- M9 }& e
13. GetParameter方法
描述         :  在运行时获取数据表对应的参数
. \  h2 y6 V7 ~8 D! v
语法  :  DataTable.GlobalSheet.GetParameter(1)  DTSheet.GetParameter(ParameterID)
4 a8 |& Y7 l# n1 Y2 f
            ParameterID列名或索引,索引从1开始。
举例  :
0 |. W& L1 [5 Y7 t( ]" z$ s9 l. s1 C
DataTable.GlobalSheet.GetParameter(1)
( b& L; a* Y5 p! [) i& q: ~
msgbox DataTable.GlobalSheet.GetParameter(1).Name                                   '获取Global Sheet的第1列的列名
msgbox DataTable.GlobalSheet.GetParameter(1).RawValue                                '获取Global Sheet的第1列的列名对应的值
7 B( l( E% z0 S( h* [+ _
msgbox DataTable.GlobalSheet.GetParameter(1).Value                                        '获取Global Sheet的第1列的列的值
msgbox DataTable.GlobalSheet.GetParameter(1).ValueByRow (2)        '获取Global Sheet的第1列的第2行的值
- C8 f' ~5 f* K: Q7 I( c: e

msgbox DataTable.Getsheet("airline").GetParameter(1).Name
  A5 }, P4 k) z$ a7 D3 N: Q
msgbox DataTable.Getsheet("airline").GetParameter(1).RawValue
msgbox DataTable.Getsheet("airline").GetParameter(1).Value
msgbox DataTable.Getsheet("airline").GetParameter(1).ValueByRow (2)

你可能感兴趣的:(工作,Microsoft,测试,Excel,action,browser)