QTP实用函数

DTParameter对象指的是运行时DataTable Sheet中的列对象。

注意:所有应用于DTParameter对象的方法仅适用于run-time DataTable对象。所有对run-time DataTable对象的改变只影响测试结果,不影响design-time Data Table

 

1.     Property

        Name

描述

返回run-time Data Table的列名。

语法

DTParameter.Name

示例

下面的例子使用“Name”方法返回run-time Data Table中新创建的列的名称,并将列名写入Report

Dim paramname

paramname = DataTable.LocalSheet.AddParameter("Food", "pizza").Name

Reporter.ReportEvent 1, "The New Parameter name is", paramname

        RawValue

描述

获取当前行指定列所对应的单元格的原始数据。原始数据是尚未计算处理过的数据,如单元格中的公式内容等。

语法

DTParameter.RawValue

本语法与DataTable.RawValueParameterID[,SheetID]用途是一样的,但是使用方法不同。

示例

下面的例子使用RawValue属性来获取run-time Data Table“ActionA”“Date”列的当前行所对应的单元格中的公式。本例中的返回值应该是Now()“

FormulaVal=DataTable.GetSheet("ActionA").GetParameter("Date").RawValue

        Value

描述

这个属性是列对象的默认属性。获取或设置列的当前行所对应的单元格的数据。

注意:这个方法返回的数据是计算后的数据。假如单元格中包括公式,则这个方法返回TrueFalse

语法

获取单元格数据:

DTParameter.Value or DTParameter

设置单元格数据:

DTParameter.Value=newvalueor DTParameter=newvalue

示例

下面的例子使用Value来设置Sheet“ActionA”“Destination”列的当前行所对应的单元格的数据。

DataTable.GetSheet("ActionA").GetParameter("Destination").Value="New York"

注意:可以省略本语句中的“Value”,因为ValueDTParameter的默认属性。

        ValueByRow

描述

获取指定列指定行所对应的单元格的数据。

语法

DTParameter.ValueByRow(RowNum)

Argument

Type

Descrīption

RowNum

Number

指定行号。行号从1开始。

示例

下面的例子使用“ValueByRow”来获得表“ActionA”“Destination”列的第4行数据。

DataTable.GetSheet("ActionA").GetParameter("Destination").ValueByRow(4)


 1.GetCellData函数

 作用:获取单元格的值

 : rowCount = Browser("xxx ").Page("xxx ").Frame("xxx").WebTable("xxx").RowCount

For counter = 1 To rowCount

 text = Browser("xxx").Page("xxx").Frame("xxx").WebTable("xxx").GetCellData(counter,1)

 If (text = "xxx") Then

    counter = counter - 1

    selectNO = "#" & counter

    Browser("xxx").Page("xxx").Frame("xxx").WebRadioGroup("xxx").Select selectNO

    Exit For

 End If

Next

 

2.把值插入datatable

 :   datatable.setcurrentrow(i)

        datatable.value("name","Global")="name"

        datatable.value("passwd","Global")="passwd"

 

3.用代码来启动浏览器

 Browser1 = "IE"

 StartURL = "www.51testing.com"

 IF Browser1 = "IE" THEN

     set IE = CreateObject("InternetExplorer.Application")

     IE.Visible = true

     IE.Navigate StartURL

 END IF

 

 

4.ExecuteFile函数

 作用:ExecuteFile 可以直接执行vbs文件,而不需要将其导入resource

       ExecuteFile FileName

 说明:where FileName is the absolute or relative path of your VBscrīpt file.

 

 :ExecuteFile("F:"test.vbs")

 

5.Strcomp函数

 作用:比较文本

 :dim strtext1,strtext2,str ,str1,comp1

     strtext1 = "xxx"

     strtext2 = "xxx"

     str = VbWindow("xxx").VbWindow("xxx").VbLabe1("xxx").GetTOProperty("text")

     str1= VbWindow("xxx").VbWindow("xxx").VbLabel("xxx").GetTOProperty("text")

     comp1=strcomp(strtext1,str,0)

     If comp=0 Then

          msgbox “这两个串相等

     else

       msgbox str

     End If

 

6.CaptureBitmap

 作用:捕获屏幕

 

7. GetROProperty

 作用:取对象属性值

 :VbWindow("xxx").VbWindow("xxx").VbWindow("xxx").ActiveX("xxx").GetROProperty("TextMatrix(1,0)") 

 

8.ExitAction - 退出当前操作,无论其循环属性如何。

 ExitActionIteration - 退出操作的当前循环。

 ExitRun - 退出测试,无论其循环属性如何。

 ExitGlobalIteration - 退出当前全局循环。

 

 

9.如何使用Excel对象处理数据?

 Dim xl

 打开excel文件

 Function OpenExcelFile(strFilePath)

 Set xl = CreateObject("Excel.Application")

 xl.Workbooks.Open strFilePath

 End Function

 获得指定单元格数据

 Function GetCellData(strSheet,rwIndex,colIndex)

 GetCellData = xl.WorkSheets(strSheet).Cells(rwIndex,colIndex)

 End Function

 填充单元格数据

 Function PutCellData(strSheet,rwIndex,colIndex,varData)

 xl.WorkSheets(strSheet).Cells(rwIndex,colIndex) = varData

 End Function

 保存并推出

 Function SaveAndQuit()

 xl.Activeworkbook.save

 xl.Quit

 Set xl = nothing

 End Function

 

10.连接sql数据库

 :Dim res,cmd,sql

     Set Res=createobject("adodb.recordset")

     Set Cmd=createobject("adodb.command")

     Cmd.activeconnection="Provider=SQLOLEDB.1;Password=111111;Persist Security Info=True;User ID=sa;Initial Catalog=xhq;Data Source=192.168.191.142"  '这句话是连接数据库的数据源,要做修改

    Cmd.CommandType = 1

    sql="selec t * from  where name=username"

    Cmd.CommandText = sql

    Set res = Cmd.Execute()

    Set res = nothing

    Set cmd.ActiveConnection = nothing

Set Cmd= nothing

 

11 检查页面是否存在
对象exist可以检查某一个页面是否存在。
代码:
if Browser("…").Page(“…").Exist then
在运行结果中显示的报告, “micPass”的状态是通过, micFail是不通过
   reporter.ReportEvent micPass ,“页面存在“,”通过“  
   else
   reporter.ReportEvent micFail ,"页面不存在“,"不通过"
end if

12 防止程序中断的方法
在回放脚本的时候,有时因为错误导致运行的脚本中断,不能自动运行。为了能达到真正无人职守的状态可以在脚本的最前面加上如下的代码: 
On error resume next  ‘遇到错误返回到脚本的下一行继续执行。
On error goto 0 ‘错误处理的控制权,平时是由QTP控制的(这个叫默认的),当有on error resume next 时,是交给on error处理,当on error goto 0时,就换给QTP

13 同步点的设定
等待某一对象出现后继续执行,为了防止qtp找不到对象而设定同步点。有2种方法:1种是用wait加等待的时间,如wait 5qtp等待5秒钟后继续执行)。另一种方法是等待要执行对象的出现,如果出现就继续执行,否则一直等待,代码如下:
y=......waitproperty("visible",true,10000)
If y=true then
   ‘执行下一条语句
   else
    ’对象不出现就一直等待,直到过了10000秒后程序找不到对象报错
End if

14 截屏
在优化脚本时,如果想查看某一页面在执行后的页面效果,可以采取截屏的办法截取当前的操作页面并保存到本地。代码:
    desktop. capturebitmap “c:"***.bmp“,ture     ’在脚本中想要查看的一行插入,运行后图片保存到设置的路径下

15 导入execl文件并参数化数据方法
Qtp自带了datatable表,可以把要参数化的数据写在里面,但这样写脚本和数据不能分离,后期不好维护脚本。现在采用从外部导入execl文件的方法导入数据。代码如下:
   datatable.ImportSheet “D:"..."data.xls”,“sheet1”,“global“ 
   ‘第一个参数是要导入文件的路径,第二个是execl的第一个表格,第三个参数是在execl的全局范围内查找
   另外datatable对象还有很多操作,比如:获取表中字段的行数,插入表数据,删除数据等,下面是获取表中数据的代码:datatable("A","dtglobalsheet)

16 为描述性编程自动创建注释
   当希望在每一个新建action时都增加一些头部说明,比如作者、创建日期、说明等信息,那么用action template来实现最简单快捷。 方法:用记事本等文本编辑器,输入如下类似的内容:           'Company:东方般若            'Date: Date          然后将文件保存为ActionTemplate.mst,并存放到QTP安装目录下的dat目录。

17 导入vbs文件
想要实现脚本的函数化,并更好的维护它,可以把一些公用的函数写到vbs里面,用qtp来调用它。
实现调用vbs的方法有2种:
1.函数executefilevbs文件的路径
  executefile “c"..."funcation.vbs”
2.设置QTP test/settings/resources/+函数目录

18 时间差函数
统计两个日期时间段之间的间隔,还有多少小时
Dim timediff
timediff=datediff(“H”,now,“2008-8-8” 
Print timediff


19 获取web下拉框中数据的行数和数据值
1.获取行数:首先将webtable添加到对象库中,查看对象库里有该webtable的属性后
count=Browser("…").Page("Page").Frame("…").WebTable("...").RowCount
   Msgbox count ‘查看行数
2.获取数据值,
   for i=1 to  count    
value=Browser("…").Page("Page").Frame("…").WebTable("...").getcelldata(i,1)
   msgbox value
   next
获取到列表中的数值后,qtp的对象库中没有这个WebElement的对象,一般采用描述性编程的方法获取对象,比如:用getcelldata获取的表中数据的innertext属性是普通岗,那么就可以用如下代码:
for i=1 to  count    
   value=Browser("…").Page("Page").Frame("…").WebTable("...").getcelldata(i,1)
 
   Browser(“…”).Page(“Page”).Frame(“…”). WebElement(“innertext:=“&value,”index:=1”).click
next

20 对象获得焦点
判断某个webedit输入框是否获取了焦点,如果没有获取就给它焦点,然后输入数值。代码如下:

if not browser("**").page(“**").webedit(“
**").object.isdisabled  then
         .object.focus
         .object.set "输入数值

21 获取对象当前属性值
GetROProperty可以获取对象的当前属性值,比如一些对象的属性经常发生变化,用getroproterty就能定位对象当前的属性状态来执行相应的操作。
Dim pro
pro= browser("**").page(“**").webedit(“
  **“). GetROProperty“property”,value)
Msgbox pro ‘弹出窗口,查看获取的属性。

22 Systemutil对象的应用
利用systemutil可以实现的功能:回放qtp脚本时禁止鼠标和键盘的输入;打开应用程序或web;通过句柄关闭进程;通过进程名关闭进程等。下面的代码是打开百度网页:
  systemutil.run “iexplore.exe”,“http://www.baidu.com”,“”,“”,“”,3        ‘打开百度的首页,最后面的参数“3” 代表打开ie后最大化

   SystemUtil.CloseProcessByName(“iexplore.exe”)      ‘关闭ie

   
23 Action的使用
action分为内部调用和外部调用2种方法:内部调用使用split划分;外部调用时被调用的action设置成share,并共享对象库。
   split actionRunAction "action", oneIteration

24.  随机数
测试中有时会用到随即数,有多种方法:
第一种 n=randomnumber.value(1,255)  ’n的值从1255之间随即产生
第二种 randomize      ‘更新反回的数据          dim n
             n=int (10*rnd())
             msgbox n        ‘n10以内的整数


25 “is+*”类型功能
   isarray'是否是数组 isconnected'判断QTP是否连接到TD isdate'是否是合法的日期类型 isempty'判断是否初始化 isNull'判断是否为空值 isNumeric'判断是否是数字型 isobject'判断是否一个功能对象 isready'判断设备是否准备就绪 isRootFolder'是否是根目录

26 对象库
打开对象库resources->object repository,或者用快捷方式:ctrl+r来打开。
1.Qtp中的对象库和脚本是一一对应的,如果脚本中某个对象在对象库中不存在,则无法回放成功,会提示找不到对象。
2.对无法识别的对象用spy工具获得后添加到对象库中。
3.有时候脚本回放失败就是找不到对象的原因,可以通过用spy工具查看找不到对象的属性,然后打开对象库,比较二者的属性信息,如果属性有不相同的说明就是属性的原因,可以通过更改属性的方式统一对象属性。

27 调试脚本
1.脚本编写完毕,可以用按ctrl+f7来查看脚本是否有语法错误。
2. Msgboxprint:在回放脚本时可以方便的查看自己想看到的信息。
3.设置断点:为了测试某一小段脚本的功能,而当整个action很长的时
候,可以设置断点单步debug


28 强制退出
遇到问题退出可以用exittest exit for,例如下面代码:
Public function text_exit()
     for i=0 to 10
            if i=3 then
                exittest
                ‘exit for
            end if
     next
End function

Text_exit()
      
29 连接数据库_增删改
Dim conn,strSql    '定义变量
set conn = CreateObject("ADODB.Connection")   '创建连接
conn.ConnectionString="Provider=SQLOLEDB.1;Password=isaac121379;Persist Security Info=True;User ID=sa;Initial Catalog=WisdomCRM;Data source=192.168.12.29"   '设置连接字符串
conn.open  '开启连接
'strSql="insert into UM_User  values(1,'UserID')"  '设置插入语句
strSql="drop  table TM_Task_14_Target"
'strSql="select *  from UM_User"

If conn.state=0 Then   '如果连接状态为0,表示连接失败,写入reporter对象中,否则表示连接成功
    Reporter.ReportEvent micFail,"testing","数据库连接失败"
    conn.close
    Set conn = nothing
else
   Reporter.ReportEvent micPass,"testing","数据库连接成功"
   conn.execute strSql    '执行更新语句
   conn.close
   Set conn = nothing
End If

 

 


30 连接数据库_
Dim conn,res,strSql    '定义变量
set conn = CreateObject("ADODB.Connection")   '创建连接
conn.ConnectionString="Provider=SQLOLEDB.1;Password=isaac121379;Persist Security Info=True;User ID=sa;Initial Catalog=WisdomCRM;Data source=192.168.12.29"  '设置连接字符串
conn.open  '开启连接
Set res = CreateObject("ADODB.RecordSet")   '创建一个记录集对象
strSql="select * from UM_User"  '设置查询雨具
If conn.state=0 Then   '如果连接状态为0,表示连接失败,写入reporter对象中,否则表示连接成功
    Reporter.ReportEvent micFail,"testing","数据库连接失败"
    res.close                               '关闭结果集和连接,并且置为空
    Set res = nothing
    conn.close
    Set conn = nothing
else
   Reporter.ReportEvent micPass,"testing","数据库连接成功"
   res.open strSql,conn    '执行查询语句
   res.MoveFirst        '将记录集游标指到记录集的最开始
   Do
      Reporter.ReportEvent micPass,"file",cstr(res(0))+" : "+cstr(res(1))  '循环遍历查询结果,并且保持到reproter对象中,直到记录集到达末尾,循环结束
      res.MoveNext
   Loop until res.eof = true
   res.close
   Set res = nothing
   conn.close
   Set conn = nothing
End If

 

 


低级录制
在无法识别对象时使用


利用Vbs运行外部程序
WSH也就是用来解析Vbs的宿主,本身包含了几个个常用对象:
1scrīpting.FileSystemObject  —>  提供一整套文件系统操作函数
2scrīpting.Dictionary  —>  用来返回存放键值对的字典对象
3Wscrīpt.Shell  —>  提供一套读取系统信息的函数,如读写注册表、查找指定文件的路径、读取DOS环境变量,读取链接中的设置
4Wscrīpt.NetWork  —>
提供网络连接和远程打印机管理的函数。(其中,所有scrīpting对象都存放在SCRRUN.DLL文件中,所有的Wscrīpt对象都存放在WSHOM.ocx文件中。)
现在我们需要的是第三个对象,好了,让我们先连接一下对象看看,在记事本的编辑窗口中输入:
Set ōbjShell = CreateObject(“Wscrīpt.Shell”)
objShell.Run “notepad”
Objshell.run “calc”


自建日志生成dll
Environment对象
检查页面文字显示颜色
Set Elements = Browser(“WisdomCRM客户关系管理系统”).Object.Document.all.tags(“div”)’tags“td”)为在td中检查
For each Element in Elements
  If Element.InnerText="执行团队" Then
    strhtml=Element.Innerhtml
    n=instr(strhtml,"color=red")
    If n=0 Then
      msgbox "Text color is red!"
   exit for
    End If
  End If
Next
关闭重复的页面
Dim loginwin
Set loginwin = descrīption.Create()                               '创建对象名为loginwin的对象
loginwin( "name").value="WisdomCRM客户关系管理系统"   '对象属性及值

Set child=desktop.ChildObjects (loginwin)
cout=child.count
msgbox cout
For i=1 to cout
   child(i-1).close  '循环寻找这个对象
Next
获取当前测试的路径
Path = environment("TestDir")'获取当前测试的路径
msgbox path
获取本机ip
set IPConfigSet = GetObject("winmgmts:{impersonationLevel=impersonate}").ExecQuery _
("select IPAddress from Win32_NetworkAdapterConfiguration where IPEnabled=TRUE")

for each IPConfig in IPConfigSet
if Not IsNull(IPConfig.IPAddress) then
for i=LBound(IPConfig.IPAddress) to UBound(IPConfig.IPAddress)
Msgbox IPConfig.IPAddress(i)
next
end if
next
点亮对象
highlight
fireEvent用法
针对Link对象,onmouseover时间还有onchange, onclick, ondblclick, onblur, onfocus, onmousedown, onmouseup, onmouseout, onsubmit, onreset, onpropertychange事件可以使用


sendkeys实例
Set wshshell=createobject(“wscrīpt.shell”)
其使用格式为:object.SendKeys string “object”:表示WshShell对象 “string”:表示要发送的按键指令字符串,需要放在英文双引号中。 1.基本键   一般来说,要发送的按键指令都可以直接用该按键字符本身来表示,例如要发送字母“x”,使用“WshShell.SendKeys "x"”即可。当然,也可直接发送多个按键指令,只需要将按键字符按顺序排列在一起即可,例如,要发送按键“happy”,可以使用“WshShell.SendKeys "happy"”
sendkeys实例
2.特殊功能键 对于需要与ShiftCtrlAlt三个控制键组合的按键,SendKeys使用特殊字符来表示: Shift---------WshShell.SendKeys "+" Ctrl---------WshShell.SendKeys "^" Alt---------WshShell.SendKeys "%" 由于“+”“^”这些字符用来表示特殊的控制按键了,如何表示这些按键呢? 只要用大括号括住这些字符即可。例如要发送加号“+”,可使用“WshShell.SendKeys "{+}"” 另外对于一些不会生成字符的控制功能按键,也同样需要使用大括号括起来按键的名称,例如要发送回车键,需要用“WshShell.SendKeys "{ENTER}"”表示,发送向下的方向键用“WshShell.SendKeys "{DOWN}"”表示。 Space---------WshShell.SendKeys " " Enter---------WshShell.SendKeys "{ENTER}" ←---------WshShell.SendKeys "{RIGHT}" ↑---------WshShell.SendKeys "{UP}" F1---------WshShell.SendKeys "{F1}" Tips:如果需要发送多个重复的单字母按键,不必重复输入该字母,SendKeys允许使用简化格式进行描述,使用格式为“{按键 数字}”。例如要发送10个字母“x”,则输入“WshShell.SendKeys "{x 10}"”即可。

先录制取得初始脚本,再做简单的修改和参数化,再进行封装形成可重用的函数,最后回放调试,形成了最终的脚本。
Public Sub logfile(message)
Const ForReading = 1, ForWriting = 2, ForAppending = 8
Dim fileSystemObj, fileSpec
Dim currentTime
currentDate = Date
currentTime = Time
testName = "log"
Set fileSystemObj = CreateObject("scrīpting.FileSystemObject")
fileSpec ="f:"log.txt"
If Not (fileSystemObj.FileExists(filespec)) Then
Set logFile = fileSystemObj.CreateTextFile(fileSpec, ForWriting, True)
logFile.WriteLine("###############################################")
logFile.WriteLine (currentDate & currentTime & " Test: " & environment.Value("TestName") )
logFile.WriteLin("######################################")
logFile.Close
Set logFile = Nothing
End If
Set logFile = fileSystemObj.OpenTextFile(fileSpec, ForAppending, False, True)
logFile.WriteLine (currentDate & " "& currentTime & " " & message)
logFile.Close
Set logFile = Nothing
Set fileSystemObj = Nothing
End Sub
logfile(“ok")
Vb6

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值