zoukankan      html  css  js  c++  java
  • QTP学习笔记1

    QTP中获取当前路径

    实属转帖,方便以后查找~

    QTP9.2版本,以下内容适合QTP和vbs。

    路径一:QTP的测试当前路径
    environment("TestDir")
    使用environment("TestDir")能获取当前测试的绝对路径,不包括最后的“”
    方法:
    Path = environment("TestDir")

    路径二:QTP安装目录下bin目录的路径
    WshShell.CurrentDirectory
    (注:不包括地址最后的“/”)
    方法:
    Dim WshShell,path
    Set WshShell = WScript.CreateObject("WScript.Shell")
    Path = WshShell.CurrentDirectory
    以上为vbs中的用法,如果是在QTP中使用,则可以用以下方法(vbs也可以用以下方法):
    Dim WshShell,path
    Set WshShell = CreateObject("WScript.Shell") ‘就这一句少了“WScript”
    Path = WshShell.CurrentDirectory
    注意:此方法在QTP运行时获取的将是QTP安装目录下bin目录的路径,如果是写在vbs文件中,然后加载到QTP中,在QTP运行时也是获取QTP安装目录下bin目录的路径。但是如果是编辑一个测试脚本(脚本里包含此获取路径方法,或引用的vbs文件包含此获取路径方法),然后保存(不要关闭脚本),这时运行脚本,则此方法将获取测试脚本存放的当前路径。关闭脚本再打开运行,则还是会获取QTP安装目录下bin目录的路径。因此在调试时可能是正常的,但到运行时就出错了。
       而如果用environment("TestDir"),则获取的都是当前测试的存放路径,但是不能用在VBS文件中(除非此文件是加载到QTP中运行的,那就可以)。
    例:QTP安装目录下的bin路径:C:program filesMercury InteractiveQuickTest Professionalin

    路径三:vbs文件的路径
    left(Wscript.ScriptFullName,len(Wscript.ScriptFullName)-len(Wscript.ScriptName))
    (注:包括地址最后的“/”)
    方法:
    Path = left(Wscript.ScriptFullName,len(Wscript.ScriptFullName)-len(Wscript.ScriptName))
    注意:此方法只能用在单独的vbs文件中,加载到QTP中的vbs文件如果含有此方法也会报错。因为QTP不支持WScript。

     


    SystemUtil对象的具体用法

    1、SystemUtil.BlockInput在执行脚本的过程中锁住键盘和鼠标
    SystemUtil.BlockInput
    Browser("Welcome: Mercury Tours").Page("Welcome: Mercury Tours").WebEdit("userName").Set "mercury"
    Browser("Welcome: Mercury Tours").Page("Welcome: Mercury Tours").WebEdit("password").SetSecure "4082986e39ea469e70dbf8c5a29429fe138c6efc"
    Browser("Welcome: Mercury Tours").Page("Welcome: Mercury Tours").Image("Sign-In").Click 2, 2
    SystemUtil.UnblockInput

    2、CloseDescendentProcesses关闭qtp打开的所有进程

    SystemUtil.Run "Notepad.exe"
    MsgBox SystemUtil.CloseDescendentProcesses

    3、object.CloseProcessByHwnd (hWnd)

    关闭一个具体句柄指定的窗口

    hWnd = Window("Notepad").GetROProperty("hwnd")可以通过GetROProperty("hwnd")这个函数获得窗口句柄SystemUtil.CloseProcessByHwnd (hWnd)
    4、object.CloseProcessById (wdProcessId)
    通过进程号pid关闭相应的窗口

    PID = Window("Notepad").GetROProperty("process id")
        SystemUtil.CloseProcessById (PID)
    5、object.CloseProcessByName (bsProcessName)

    通过名字来关闭进程例子

    SystemUtil.Run "Notepad.exe"
    SystemUtil.Run "Notepad.exe"
    SystemUtil.Run "Notepad.exe"
    MsgBox SystemUtil.CloseProcessByName("Notepad.exe")
    6、object.CloseProcessByWndTitle (bsTitle, [bRegExp])
    关闭所有窗口包含title文字的进程

    bregexp若为true表示title被当作一个正则表达式处理 默认为false
    7、隆重出场 run

    object.Run file, [params], [dir], [op], [mode]

    Argument Description
    object A test object of type SystemUtil.
    file Required. A String value. The name of the file you want to run.
    params Optional. A String value. If the specified file argument is an executable file, use the params argument to specify any parameters to be passed to the application.
    dir Optional. A String value. The default directory of the application or file.
    op Optional. A String value. The action to be performed. If this argument is blank ( ""), the open operation is performed.
    The following operations can be specified for the op argument: Operation
     Description
     
    open  Opens the file specified by the FileName parameter. The file can be an executable file, a document file, or a folder. Non-executable files are open in the associated application.
    edit  Launches an editor and opens the document for editing. If the FileName argument does not specify an editable document file, the statement fails.
    explore  Explores the folder specified by the FileName argument.
    find  Initiates a search starting from the specified folder path.
    print  Prints the document file specified by the FileName argument. If the specified file is not a printable document file, the statement fails.
     
    mode Optional. An Integer value.
    Specifies how the application is displayed when it opens. You can specify one of the modes in the table below.
    Default = 1

    Mode
     Description
     
    0  Hides the window and activates another window.
    1   Activates and displays the window. If the window is minimized or maximized, the system restores it to its original size and position. Specify this flag when displaying the window for the first time.
    2   Activates the window and displays it as a minimized window.
    3   Activates the window and displays it as a maximized window.
    4   Displays the window in its most recent size and position. The active window remains active.
    5   Activates the window and displays it in its current size and position.
    6   Minimizes the specified window and activates the next top-level window in the Z order.
    7   Displays the window as a minimized window. The active window remains active.
    8   Displays the window in its current state. The active window remains active.
    9   Activates and displays the window. If the window is minimized or maximized, the system restores it to its original size and position. Specify this flag when restoring a minimized window.
    10   Sets the show-state based on the state of the program that started the application.
     

    Return Type

     

    SystemUtil.Run "C: ype.txt", "", "", ""
    Window("Text:=type.txt - Notepad").Type "happy days"
    Window("Text:=type.txt - Notepad").Type micAltDwn & "F" & micAltUp
    Window("Text:=type.txt - Notepad").Type micLShiftDwn & "S" & micLShiftUp
    Window("Text:=type.txt - Notepad").Close

    QTP如何获取本地Excel文件的行和列

    Set  excel=CreateObject("Excel.Application")
    set openexcel=excel.Workbooks.Open("这里输入EXCEL路径")
    rowcount =openexcel.ActiveSheet.UsedRange.Rows.Count
    Columnscount =openexcel.ActiveSheet.UsedRange.Columns.count
    print " 行数:"&rowcount&"  列数:"&Columnscount
    openexcel.Close
    excel.Quit
    set openexcel=nothing
    Set  excel=nothing

    '若想要获取Excel中指定sheet的行数和列数,函数如下:
    Public function getrowandcol(filepath,sheetname)
    '函数作用:获取EXCEL指定sheet的行数和列数
    '参数说明
    'filepath:EXCEL所在路径
    'sheetname:需要统计行数和列数的SHEET名称
    '用法示例:getrowandcol"D:/qqq.xlsx","sheet1"

    Set  excel=CreateObject("Excel.Application")
    set openexcel=excel.Workbooks.Open(filepath)
    openexcel.WorkSheets(sheetname).Activate
               rowcount =openexcel.ActiveSheet.UsedRange.Rows.Count
               Columnscount =openexcel.ActiveSheet.UsedRange.Columns.count
    If openexcel.WorkSheets(sheetname).Cells(1,1 )="" and rowcount=1 and Columnscount=1 then
               print sheetname&"中没有数据"
    else
               print sheetname&"的行数为:"&rowcount&"  列数:"&Columnscount
    end if
    openexcel.Close
    excel.Quit
    set openexcel=nothing
    Set  excel=nothing

    End Function

    '说明,若sheet中没有数据,则默认为1行1列,可以写个判断语句,避免没有数据时行数和列数显示为1。见函数中红色代码



    VBScript/QTP 的常用COM对象列表

    众所周知,我们经常在脚本中创建一些对象来实现某些特定的功能。尤其是当我们使用QTP的描述性编程时,需要创建这些对象。

    下边是我们经常在QTP或VBScript中用到的对象列表:

    Set objEmail = CreateObject("CDO.Message" )

    Set objIE = CreateObject("InternetExplorer.Application" )

    Set objInet = CreateObject("InetCtls.Inet.1" )

    Set objHTTP = CreateObject("WinHttp.WinHttpRequest.5.1" )

    Set objExcel =CreateObject("Excel.Application" )

    Set objOutlook = CreateObject("Outlook.Application" )

    Set objPpt = CreateObject( "PowerPoint.Application")

    Set objWord = CreateObject("Word.Application" )

    Set objCal = CreateObject("MSCAL.Calendar" )

    Set objQPro = CreateObject("QuattroPro.PerfectScript")

    Set objWP = CreateObject("WordPerfect.PerfectScript”")

    Set objConn = CreateObject("ADODB.Connection" )

    Set objRecSet = CreateObject("ADODB.Recordset" )

    Set objDic = CreateObject("Scripting.Dictionary")

    Set objFSO = CreateObject("Scripting.FileSystemObject" )

    Set wshNetwork = CreateObject("WScript.Network" )

    Set wshShell = CreateObject("WScript.Shell")

    Set objRandom = CreateObject("System.Random" )

    Set objArrList = CreateObject("System.Collections.ArrayList")

    Set objSortList = CreateObject("System.Collections.SortedList" )

    Set xmlDoc = CreateObject( "Microsoft.XmlDom")

    Set xml2Doc = CreateObject("Msxml2.DOMDocument.5.0")

    Set objiTunes = CreateObject("iTunes.Application")

    Set objPlayer = CreateObject("WMPlayer.OCX" )

    Set objWMPlayer = CreateObject("WMPlayer.OCX.7" )

    Set objReal = CreateObject( "rmocx.RealPlayerG2 Control.1")

    Set objFSDialog = CreateObject("SAFRCFileDlg.FileSave")

    Set objFODialog = CreateObject("SAFRCFileDlg.FileOpen" )

    Set objDialog = CreateObject("UserAccounts.CommonDialog")

    Set SOAPClient = CreateObject("MSSOAP.SOAPClient")

    Set objWOL = CreateObject("UltraWOL.ctlUltraWOL")

    Set objSearcher = CreateObject("Microsoft.Update.Searcher")

    Set objShell = CreateObject("Shell.Application")

    SetobjDeviceReplay=CreateObject("Mercury.DeviceReplay")

    以下是示例演示:

    描述:创建和返回一个自动化对象的引用

    语法: CreateObject(class)

    class 参数使用了语法servername.typename

    servername: 提供对象的应用程序的名称

    typename: 对象的类型或类

    说明:每个自动化对象至少提供一种对象类型。例如,一个文字处理程序可能会提供一个应用程序对象,一个文件对象和一个工具栏对象。要创建一个自动化对象,需要把CreateObject创建的对象变量赋给一个对象变量。

    示例1:创建一个Excel应用程序对象 (“Excel.Application” )

    '关闭桌面上打开的所有Excel表格

    Systemutil.CloseProcessByName"excel.exe"

    '创建一个新的Excel对象

    Set Excel =CreateObject("Excel.Application")

    '打开Excel表格

    Set SExcelSheet =Excel.Workbooks.Open("C:UsersdjiaoDocumentsellaCR_Report.xlsx")

    '设置表格可见

    SExcelSheet.Application.visible=true

    '关闭任何Excel的错误窗口或提示信息

    Excel.DisplayAlerts = False

    '重命名并保存Excel到不同的路径下

    SExcelSheet.SaveAs"C:BaseLine.xlsx"

    '关闭Excel的表格

    SExcelSheet.Close

    '退出Excel应用程序

    Excel.Quit

    示例3A: 创建文件系统对象 (“Scripting.FileSystemObject”)

    '将要创建的文件夹的存放路径

    strDrive = "D:DATA"

    '要创建的文件夹名称

    strfoldername= "New Folder"

    '获取文件夹的绝对路径

    strPath=strDrive&""&strfoldername

    '创建 FileSystemObject 对象

    Set objFSO =CreateObject("Scripting.FileSystemObject")

    '文件夹不存在时,创建文件夹

    If NOT objFSO.FolderExists(strPath) Then

      objFSO.CreateFolder strPath

    End If

    '释放文件系统对象

    Set objFSO = nothing

    示例3B:

    'Get the name of file extention

    msgbox GetAnExtension("C:ProgramFiles (x86)HPQuickTest ProfessionalinQTPro.exe")

    Function GetAnExtension(DriveSpec)

             Dimfso

             Setfso = CreateObject("Scripting.FileSystemObject")

             GetAnExtension= fso.GetExtensionName(Drivespec)

             Setfso = nothing

    End Function

    示例4: 邮件发送对象(“CDO.Message”)

    Dim objMessage

    '创建邮件发送对象

    Set objMessage =CreateObject("CDO.Message")

    '给邮件添加主题

    objMessage.Subject = "QTP Results –Automated Testing"

    objMessage.From ="QTPTesting@address.com" ' 改为你自己的邮箱地址

    objMessage.To = "your@email.com"'收件人邮箱地址

    objMessage.CC = "your@email.com"'CC to email id

    '邮件内容

    objMessage.TextBody ="N.B. – Please DoNot Reply This Message Directly."

    '添加附件

    objMessage.AddAttachment"D:Datafile.text"

    '这部分提供了远程SMTP server的配置信息

    objMessage.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendusing")= 2

    '设置SMTP server的name或IP

    objMessage.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserver")= "smtp.163.com"

    '服务器端口号(通常是 25)

    objMessage.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport")= "someserver.domain.com"

    objMessage.Configuration.Fields.Update

    '发送邮件

    objMessage.Send

    '释放邮件对象

    Set objMessage = nothing

    示例5: 创建WshShell对象 (“Wscript.Shell”)

    说明:WScript.Shell是WshShell对象的ProgID,创建WshShell对象可以运行程序、操作注册表、创建快捷方式、访问系统文件夹、管理环境变量。

    Set WshShell =CreateObject("Wscript.Shell")

    Dim Response

    '显示一个带有yes和no的消息框

    Response = MsgBox("Please Select yourchoice as ‘Yes’ or ‘No’.", vbYesNo)

    If Response = vbYes Then

             '消息框会显示3秒钟

             WshShell.Popup"You Have Been Selected “Yes”. Please wait.", 3, "YourSelection"

    Else

             '消息框会显示5秒

             WshShell.Popup"You Have Been Selected “No”", 5, "Your Selection"

    End If

    Set WshShell = nothing

    示例6A: Mercury.DeviceReplay对象  (“Mercury.DeviceReplay”)

    说明:这个对象用来模拟鼠标的单击和移动、键盘输入等。使用该对象前,需要保证键盘状态正确,如NUMLOCK是否打开等,DeviceReplay不能检测键盘状态。

    '定义坐标

    Dim abs_x, abs_y

    abs_x = 200

    abs_y = 200

    '创建Mercury.DeviceReplay对象

    Set objMercuryMouse = CreateObject("Mercury.DeviceReplay")

    '移动鼠标到指定坐标

    objMercuryMouse.MouseMove abs_x,abs_y

    '鼠标左击

    objMercuryMouse.MouseClick abs_x,abs_y,LEFT_MOUSE_BUTTON

    Wait 3

    '释放Mercury.DeviceReplay对象

    Set objMercuryMouse = nothing

    示例7:字典对象(“Scripting.Dictionary”)

    '创建dictionary对象

    Dim d

    Set d =CreateObject("Scripting.Dictionary")

    '给dictionary添加key和value

    d.Add "a","Athens"  

    d.Add "b", "Belgrade"

    d.Add "c", "Cairo"

    '获取所有的item

    a = d.Items

    For i = 0 To d.Count -1 ' Iterate thearray.

      s =s & a(i) & VBCrLF ' Create return string.

    Next

    print s

    '根据key获取item

    print d.Item("a")

    '释放dictionary对象

    Set d = nothing

    Example 8A: Connection对象,数据集对象("ADODB.Connection")/("ADODB.Recordset")

    Function database()

             v_DBInstance= "RENPCRT8"

             v_MHXMLDBPwd= "grudge"

             v_MHXMLDBSchema= "Mhxmledit"

             '创建数据库连接对象和数据集对象

             ConstadOpenStatic = 3

             ConstadLockOptimistic = 3

             ConstadUseClient = 3

             SetobjConnection = CreateObject("ADODB.Connection")

             SetobjRecordset = CreateObject("ADODB.Recordset")

             objConnection.Open"DRIVER={Microsoft ODBC for Oracle};UID="& v_MHXMLDBSchema&" ;PWD="& v_MHXMLDBPwd & ";SERVER="&v_DBInstance &”;"

             objRecordset.CursorLocation= adUseClient

             objRecordset.CursorType= adopenstatic

             objRecordset.LockType= adlockoptimistic

             objRecordset.Source= "select SOP from MHXML.FIRMS_STG where org_id in 681915"

             ObjRecordset.ActiveConnection= ObjConnection

             '执行查询语句

             ObjRecordset.Open

             IfObjRecordset.recordcount>0 then

                       Field1= ObjRecordset("SOP").Value

                       msgboxField1

             Endif

    End Function

    Example 8B: (“Database connection withoutADODB.Connection Object”)

    此方法可以从数据库中获取值为空或者null的数据

    Function GetAttorneyInfo(InField,ALid)

             v_DBInstance="RENPCRT8"

             v_MHXMLDBPwd="creek"

             v_MHXMLDBSchema="lbmgradmin"

             GetAttorneyInfo=""

             '创建数据库连接

             MHXMLconnection_string="DRIVER={MicrosoftODBC for Oracle};UID="& v_MHXMLDBSchema &" ;PWD="&v_MHXMLDBPwd &";SERVER=" & v_DBInstance &";"

             isMHXMLConnected= db_connect ( MHXMLConnection ,MHXMLconnection_string )

             IfisMHXMLConnected=0Then '从表中获取数据

                       v_Exe_SQL2="Selectlength(NVL(" & InField & ",'Data Not Found')) fromlbmgradmin.ilv_vw where ilisting_id = " & ALid

                       setRecSet_SOPInfo_LEN = db_execute_query( MHXMLConnection , v_Exe_SQL2 )

                       d_SOPInfo_Length= db_get_field_value( RecSet_SOPInfo_LEN , 0 , 0 )

                       v_Exe_SQL2="selectsubstr(to_char(NVL(" & InField & ",'Data NotFound')),1," & d_SOPInfo_Length & ") from lbmgradmin.ilv_vwwhere ilisting_id = " & ALid

                       setRecSet_SOPInfo = db_execute_query( MHXMLConnection , v_Exe_SQL2 )

                       RowCnt= db_get_rows_count( RecSet_SOPInfo )

                       IfRowCnt=1Then

                                d_SOPInfo=db_get_field_value(RecSet_SOPInfo , 0 , 0 )

                       else

                                datatable.SetCurrentRow(1)

                                d_SOPInfo=db_get_field_value(RecSet_SOPInfo , 0 , 0 )

                       EndIf

             else

             EndIf

             GetAttorneyInfo=d_SOPInfo

    End Function

    '打开数据库连接

    Function db_connect( byRef curSession,connection_string)

             Dimconnection

             onerror Resume next

             '创建数据库连接对象

             setconnection = CreateObject("ADODB.Connection")

             IfErr.Number <> 0 then

                       db_connect="Error # " & CStr(Err.Number) &" " &Err.Description

                       err.clear

                       ExitFunction

             EndIf

             connection.Openconnection_string

             IfErr.Number <> 0 then

                       db_connect="Error # " & CStr(Err.Number) & " " &Err.Description

                       err.clear

                       ExitFunction

             EndIf

             setcurSession=connection

             db_connect=0

    End Function

    '关闭数据库连接

    Function db_disconnect( byRef curSession )

             curSession.close

             setcurSession = Nothing

    End Function

    '执行查询语句

    Function db_execute_query ( byRefcurSession , SQL)

             setrs = curSession.Execute( SQL )

             setdb_execute_query = rs

    End Function

    '获取数据集的行数

    Function db_get_rows_count( byRef curRS )

             dimrows

             rows= 0

             curRS.MoveFirst

             DoUntil curRS.EOF

             rows= rows+1

             curRS.MoveNext

             Loop

             db_get_rows_count= rows

    End Function

    Example 8C: (“ADODB.Connection”)/(“ADODB.Recordset”)

    此示例从Excel表单中获取数据

    '创建数据库连接对象

    Dim Get_Field

    set connectToDB =CreateObject("ADODB.Connection")

    connectToDB.Provider ="Microsoft.Jet.OLEDB.4.0"

    connectToDB.Properties("ExtendedProperties").Value = "Excel 8.0"

    connectToDB.Open "D:Documents andSettingspauldxDesktopData.xls"

    strQuery="Select Age from [Data$]WHERE Name ='Joli'"

    '创建数据集对象

    Set rsRecord =CreateObject("ADODB.Recordset")

    rsRecord.Open strQuery,connectToDB,1,1

    If rsRecord.RecordCount>0 Then

             fori= 1 to rsRecord.RecordCount

                       Get_Field=rsRecord.Fields(0)

                       printGet_Field

                       rsRecord.movenext

             next

    Else

             Get_Field="FieldNot Present"

    End If

    Example 9:("AcroExch.App"/"AcroExch.AVDoc")

    此段代码可以从pdf 文件中搜索Software单词

    备注:这段代码只有当你安装了acrobat 专业版安装的时候才可以使用。如果只安装了adobe 阅读器的标准版,你会看到如下报错“ActiveX component can’t create object: ‘AcroExch.PDDoc””

    Option Explicit

    Dim accapp, acavdocu

    Dim pdf_path, bReset, Wrd_count

    pdf_path="C: est.pdf"

    '创建AcroExch i应用程序对象

    Setaccapp=CreateObject("AcroExch.App")

    accapp.Show()

    '创建AVDoc对象

    Setacavdocu=CreateObject("AcroExch.AVDoc")

    '打开PDF文件

    If acavdocu.Open(pdf_path,"")Then

    acavdocu.BringToFront()

    bReset=1 : Wrd_count = 0

    '查找,定位并高亮指定文本

    Do Whileacavdocu.FindText("software", 1, 1, bReset)

    bReset=0: Wrd_count=Wrd_count+1

    Wait 0, 200

    Loop

    End If

    accapp.CloseAllDocs()

    accapp.Exit()

    msgbox "The word 'software' was found" & Wrd_count & "times"

    Set accap=nothing

    Set accapp=nothing

    Example 10: .Net 对象("DotNetFactory")

    说明:DotNetFactory对象允许创建一个.NET对象,并访问其方法和属性

    '创建.Net的form对象

    Dim var_CreateInstance

    Set var_CreateInstance =DotNetFactory.CreateInstance("System.Windows.Forms.Form","System.Windows.Forms")

    '显示form

    var_CreateInstance.Show

    wait 2

    '关闭form

    var_CreateInstance.Close

    '释放.Net对象

    Set var_CreateInstance = nothing

  • 相关阅读:
    虚拟PC上网设置
    打造无线AP
    ftp密码修改
    桌面
    红蜘蛛
    C++ Zip压缩解压缩[支持递归压缩]
    C++通过访问注册表获取已安装软件信息列表
    IOS Simulator Create Keyboard Shortcut
    简单的silverlight切图程序
    silverlight 反射调用WebService
  • 原文地址:https://www.cnblogs.com/gdg87813/p/10521759.html
Copyright © 2011-2022 走看看