视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
QTP非常实用的函数
2025-09-30 23:22:10 责编:小OO
文档
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    

描述

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

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

语法

获取单元格数据:

DTParameter.Value or DTParameter

设置单元格数据:

DTParameter.Value=newvalueor DTParameter=newvalue

示例

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

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

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

        ValueByRow

描述

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

语法

DTParameter.ValueByRow(RowNum)

ArgumentTypeDescrīption
RowNumNumber指定行号。行号从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

        datatable.value("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 5(qtp等待5秒钟后继续执行)。另一种方法是等待要执行对象的出现,如果出现就继续执行,否则一直等待,代码如下:

y=......waitproperty("visible",true,10000)

If y=true then

   ‘执行下一条语句

   else

    ’对象不出现就一直等待,直到过了10000秒后程序找不到对象报错

End if

14 截屏

在优化脚本时,如果想查看某一页面在执行后的页面效果,可以采取截屏的办法截取当前的操作页面并保存到本地。代码:

在脚本中想要查看的一行插入,运行后图片保存到设置的路径下

15 导入execl文件并参数化数据方法

Qtp自带了datatable表,可以把要参数化的数据写在里面,但这样写脚本和数据不能分离,后期不好维护脚本。现在采用从外部导入execl文件的方法导入数据。代码如下:

   datatable.ImportSheet “D:"..."data.xls”,“sheet1”,“global“ 

   ‘第一个参数是要导入文件的路径,第二个是execl的第一个表格,第三个参数是在execl的全局范围内查找

   另外datatable对象还有很多操作,比如:获取表中字段的行数,插入表数据,删除数据等,下面是获取表中数据的代码:datatable("A

16 为描述性编程自动创建注释

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

17 导入vbs文件

想要实现脚本的函数化,并更好的维护它,可以把一些公用的函数写到vbs里面,用qtp来调用它。

实现调用vbs的方法有2种:

1.函数executefile加vbs文件的路径

  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 action:RunAction "action", oneIteration

24.  随机数

在测试中有时会用到随即数,有多种方法:

第一种 :n=randomnumber.value(1,255)  ’n的值从1到255之间随即产生

第二种 :randomize      ‘更新反回的数据          dim n

             n=int (10*rnd())

             msgbox n        ‘n为10以内的整数

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. Msgbox和print:在回放脚本时可以方便的查看自己想看到的信息。

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的宿主,本身包含了几个个常用对象:

1、scrīpting.FileSystemObject  —>  提供一整套文件系统操作函数

2、scrīpting.Dictionary  —>  用来返回存放键值对的字典对象

3、Wscrīpt.Shell  —>  提供一套读取系统信息的函数,如读写注册表、查找指定文件的路径、读取DOS环境变量,读取链接中的设置

4、Wscrīpt.NetWork  —>

提供网络连接和远程打印机管理的函数。(其中,所有scrīpting对象都存放在SCRRUN.DLL文件中,所有的Wscrīpt对象都存放在WSHOM.ocx文件中。)

现在我们需要的是第三个对象,好了,让我们先连接一下对象看看,在记事本的编辑窗口中输入:

Set ōbjShell = CreateObject(“Wscrīpt.Shell”)

objShell.Run “notepad”

Objshell.run “calc”

自建日志

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生成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.特殊功能键 对于需要与Shift、Ctrl、Alt三个控制键组合的按键,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}"”即可。

先录制取得初始脚本,再做简单的修改和参数化,再进行封装形成可重用的函数,最后回放调试,形成了最终的脚本。下载本文

显示全文
专题