发布新日志

  • WshShell 对象(转载)

    2009-06-02 22:24:03

    WshShell 对象
    ProgID Wscrīpt.Shell
    文件名 WSHom.Ocx
    CLSID F935DC22-1CF0-11d0-ADB9-00C04FD58A0B
    IID F935DC21-1CF0-11d0-ADB9-00C04FD58A0B

    下表说明和 WshShell 对象有关的属性。
    属性 说明
    Environment 返回 WshEnvironment 集合对象。
    SpecialFolders 使用 WshSpecialFolders 对象提供对 Windows shell 文件夹的访问,如桌面文件夹,开始菜单文件夹和个人文档文件夹。

    下表说明和 WshShell 对象有关的方法。
    方法 说明
    CreateShortcut 创建并返回 WshShortcut 对象。
    ExpandEnvironmentStrings 扩展 PROCESS 环境变量并返回结果字符串。
    Popup 显示包含指定消息的消息窗口。
    RegDelete 从注册表中删除指定的键或值。
    RegRead 从注册表中返回指定的键或值。
    RegWrite 在注册表中设置指定的键或值。
    Run 创建新的进程,该进程用指定的窗口样式执行指定的命令。

    WshShell.Environment
    Environment 属性返回 WshEnvironment 对象。
    语法
    WshShell.Environment ( [strType]) = objWshEnvironment
    注释
    若 strType 指定了环境变量所处的位置,可能值为 "System"、"User"、"Volatile" 和 "Process"。若未提供 strType,则该方法在 Windows NT 中检索系统环境变量或在 Windows 95 中检索进程环境变量。
    对于 Windows 95,strType 参数仅支持 "Process"。
    下列变量是由 Windows 操作系统提供的。脚本也可获取由其他应用程序设置的环境变量。
    名称 说明
    NUMBER_OF_PROCESSORS 计算机上运行的处理器数目。
    PROCESSOR_ARCHITECTURE 用户工作站使用的处理器类型。
    PROCESSOR_IDENTIFIER 用户工作站的处理器 ID。
    PROCESSOR_LEVEL 用户工作站的处理器级。
    PROCESSOR_REVISION 用户工作站的处理器版本。
    OS 用户工作站所用的操作系统。
    COMSPEC 用于运行“命令提示”窗口的命令(通常为 cmd.exe)。
    HOMEDRIVE 本地主驱动器(通常为 C 驱动器)。
    HOMEPATH 用户的默认路径(在 Windows NT 上通常为 usersdefault)。
    PATH 路径环境变量。
    PATHEXT 可执行文件的扩展名(通常为 .com、 .exe、.bat 或 .cmd)。
    PROMPT 命令提示符(通常为 $P$G)。
    SYSTEMDRIVE 系统所在的本地驱动器(例如,c:)。
    SYSTEMROOT 系统目录(例如,c:winnt)。和 WINDIR 相同。
    WINDIR 系统目录(例如 c:winnt)。和 SYSTEMROOT 相同。
    TEMP 存储临时文件的目录(例如,c:temp)。用户可更改。
    TMP 存储临时文件的目录(例如,c:temp)。用户可更改。

    示例
    '' Retrieve the NUMBER_OF_PROCESSORS system environment variable
    Set WshShell = Wscrīpt.CreateObject("Wscrīpt.Shell")
    Set WshSysEnv = WshShell.Environment("SYSTEM")
    Wscrīpt.Echo WshSysEnv("NUMBER_OF_PROCESSORS")
    请参阅
    WshEnvironment 对象

    WshEnvironment 对象
    WshEnvironment 对象未直接给出,可用 WshShell.Environment 属性来访问。
    ProgID N/A
    文件名 WSHom.Ocx
    CLSID
    IID

    下表描述与 WshEnvironment 对象关联的属性。
    属性 说明
    Item 获取或设置指定的环境变量值。
    Count 枚举项的数目。
    length 枚举项的数目 (Jscrīpt)。

    下表描述与 WshEnvironment 对象关联的方法。
    方法 说明
    Remove 删除指定的环境变量。

    WshShell.SpecialFolders
    SpecialFolders 属性提供 WshSpecialFolders 对象以便访问 Windows 的 shell 文件夹,例如桌面文件夹、开始菜单文件夹和个人文档文件夹。
    语法
    WshShell.SpecialFolders = objWshSpecialFolders
    示例
    '' This code fragment shows how to access the desktop folder
    Set WshShell = Wscrīpt.CreateObject("Wscrīpt.Shell")
    MsgBox "Your desktop is " & WshShell.SpecialFolders("Desktop")
    请参阅
    WshSpecialFolders 对象
    WshSpecialFolders 对象
    该对象未直接给出。要得到 WshSpecialFolders 对象,请使用 WshShell.SpecialFolders 属性。
    ProgID N/A
    文件名 WSHom.Ocx
    CLSID
    IID

    下表描述与 WshSpecialFolders 对象关联的属性。
    属性 描述
    Item 指定文件夹的完整路径(默认)。
    Count 枚举项的数目。
    length 枚举项的数目 (Jscrīpt) 。
    WshSpecialFolders.Item
    Item 属性返回由 strFolderName 指定的文件夹的完整路径。它是默认属性。
    语法
    WshShell.SpecialFolders.Item("strFolderName") = strFolderPath
    WshShell.SpecialFolders("strFolderName") = strFolderPath
    注释
    若请求的文件夹 (strFolderName) 不可用,则 WshShell.SpecialFolders("strFolderName") 返回 NULL。例如,Windows 95 没有 AllUsersDesktop 文件夹,如果 strFolderName = AllUsersDesktop,则返回 NULL。
    Windows 95 和 Windows NT 4.0 操作系统提供下列指定文件夹:
    AllUsersDesktop
    AllUsersStartMenu
    AllUsersPrograms
    AllUsersStartup
    Desktop
    Favorites
    Fonts
    MyDocuments
    NetHood
    PrintHood
    Programs
    Recent
    SendTo
    StartMenu
    Startup
    Templates
    示例
    '' This fragment returns the full path for the Windows Desktop folder
    Set WshShell = Wscrīpt.CreateObject("Wscrīpt.Shell")
    StrMyDesktop = WshShell.SpecialFolders("Desktop")
    '' List all special folders
    For Each strFolder In WshShell.SpecialFolders
    MsgBox strFolder
    Next
    请参阅
    WshShell.SpecialFolders 属性

    WshShell.CreateShortcut
    CreateShortcut 方法创建 WshShortcut 对象并将其返回。如果快捷方式标题以 .url 结尾,就会创建 WshURLShortcut 对象。
    语法
    WshShell.CreateShortcut(strPathname) = objShortcut
    示例
    '' This code fragment creates a shortcut
    '' to the currently executing scrīpt
    Set WshShell = Wscrīpt.CreateObject("Wscrīpt.Shell")
    Set ōShellLink = WshShell.CreateShortcut("Current scrīpt.lnk")
    oShellLink.TargetPath = Wscrīpt.scrīptFullName
    oShellLink.Save
    Set ōUrlLink = WshShell.CreateShortcut("Microsoft Web Site.URL")
    oUrlLink.TargetPath = "http://www.microsoft.com"
    oUrlLink.Save
    请参阅
    WshShortcut 对象、WshUrlShortcut 对象
    WshShortcut 对象
    该对象未直接给出。要获得 WshShortcut 对象,请使用 WshShell.CreateShortcut 方法。
    ProgID N/A
    文件名 WSHom.Ocx
    CLSID F935DC28-1CF0-11d0-ADB9-00C04FD58A0B
    IID F935DC27-1CF0-11d0-ADB9-00C04FD58A0B

    下表说明和 WshShortcut 对象有关的属性。
    属性 说明
    Arguments 快捷方式对象的参数。
    Descrīption 快捷方式对象的说明。
    Hotkey 快捷方式对象的热键。
    IconLocation 快捷方式对象的图标位置。
    TargetPath 快捷方式对象的目标路径。
    WindowStyle. 快捷方式对象的窗口样式。
    WorkingDirectory 快捷方式对象的工作目录。

    下表说明与 WshShortcut 对象有关的方法。
    方法 说明
    Save 将快捷方式存储到指定的文件系统中。
    WshShortcut.Arguments
    Arguments 属性提供快捷方式对象的参数。
    语法
    WshShortcut.Arguments = strArguments
    WshShortcut.Descrīption
    Descrīption 属性提供快捷方式对象的说明。
    语法
    WshShortcut.Descrīption = strDescrīption
    WshShortcut.Hotkey
    HotKey 属性提供快捷方式对象的热键。热键是启动或切换程序的键盘快捷方式。
    语法
    WshShortcut.HotKey = strHotKey
    注释
    strHotKey 的BNF语法如下:
    Hotkey ::= modifier* keyname
    modifier ::= "ALT+" | "CTRL+" | "SHIFT+" | "EXT+"
    keyname ::= "A" .. "Z" |
    "0".. "9" |
    "Back" | "Tab" | "Clear" | "Return" |
    "Escape" | "Space" | "Prior" | ...
    所有键的名称都可以在 WINUSER.H 中找到。热键不区分大小写。
    热键只能激活位于 Windows 桌面或 Windows“开始”菜单的快捷方式。
    Windows 资源管理器不接受 ESC、ENTER、TAB、SPACE、PRINT SCREEN 或 BACKSPACE,即使 WshShortcut.Hotkey 遵循 Win32 API 支持它们。因此,建议在快捷方式中不要用这些键。
    示例
    Set WshShell = Wscrīpt.CreateObject("Wscrīpt.WshShell")
    strDesktop = WshShell.SpecialFolders("Desktop")
    Set ōMyShortcut = WshShell.CreateShortcut(strDesktop & "a_key.lnk")
    OMyShortcut.TargetPath = "%windir%notepad.exe"
    oMyShortCut.Hotkey = "ALT+CTRL+F"
    oMyShortCut.Save
    Wscrīpt.Echo oMyShortCut.HotKey = "Alt+Ctrl+F"
    请参阅
    WshSpecialFolders 对象
    WshShortcut.IconLocation
    IconLocation 属性提供快捷方式对象的图标位置。图标位置的格式应为 "Path,index"。
    语法
    WshShortcut.IconLocation = strIconLocation
    WshShortcut.TargetPath
    TargetPath 属性提供快捷方式对象的目标路径。
    语法
    WshShortcut.TargetPath = strTargetPath
    WshShortcut.WindowStyle
    WindowStyle. 属性提供快捷方式对象的窗口样式。
    语法
    WshShortcut.WindowStyle. = natWindowStyle
    WshShortcut.WorkingDirectory
    WorkingDirectory 为一个快捷方式对象提供工作目录。
    语法
    WshShortcut.WorkingDirectory = strWorkingDirectory
    WshShortcut.Save
    Save 方法把快捷方式对象保存到由 FullName 属性指定的位置。
    语法
    WshShortcut.Save
    WshUrlShortcut 对象
    该对象未直接给出。要获取 WshUrlShortcut 对象,可使用 WshShell.CreateShortcut 方法。
    ProgID N/A
    文件名 WSHom.Ocx
    CLSID
    IID

    该文章转载自脚本之家:http://www.jb51.net/html/200612/114/5683.htm

    下表说明了和 WshUrlShortcut 对象有关的属性。
    属性 说明
    FullName URL 快捷方式对象的完整路径。
    TargetPath URL 快捷方式对象的目标路径。

    下表说明了和 WshUrlShortcut 对象有关的方法。
    方法 说明
    Save 将快捷方式保存到指定的文件系统中。
    WshUrlShortcut.FullName
    FullName 属性提供快捷方式对象的完整路径。
    语法
    WshUrlShortcut.FullName = strFullName
    WshUrlShortcut.TargetPath
    TargetPath 属性提供快捷方式对象的目标路径。
    语法
    WshUrlShortcut.TargetPath = strTargetPath
    WshUrlShortcut.Save
    Save 方法保存一个快捷方式,该快捷方式指向 FullName 属性指定的位置。
    语法
    WshUrlShortcut.Save
    WshShell.ExpandEnvironmentStrings
    ExpandEnvironmentStrings 方法在 strString 中扩展 PROCESS 环境变量并返回结果字符串。变量被 ''%'' 字符括起。
    环境变量不区分大小写。
    语法
    WshShell.ExpandEnvironmentStrings(strString) = strExpandedString
    示例
    MsgBox "Prompt is " & WshShell.ExpandEnviromentStrings("%PROMPT%")

    WshShell.Popup
    Popup 方法显示一个弹出式消息框窗口,消息框中包含的消息由 strText 指定。该消息框的窗口标题由 strTitle 指定。若 strTitle 省略,则窗口标题为 Windows scrīpting Host。
    语法
    WshShell.Popup(strText, [natSecondsToWait], [strTitle], [natType]) = intButton
    注释
    若提供 natSecondsToWait 且其值大于零,则消息框在 natSecondsToWait 秒后关闭。
    natType 的含义与其在 Win32? MessageBox 函数中相同。下表显示 natType 中的值及含义。下表中的值可以组合。
    按钮类型
    值 说明
    0 显示“确定”按钮
    1 显示“确定”和“取消”按钮
    2 显示“终止”、“重试”和“忽略”按钮
    3 显示“是”、“否”和“取消”按钮
    4 显示“是”和“否”按钮
    5 显示“重试”和“取消”按钮

    图标类型
    值 说明
    16 显示停止标记图标
    32 显示问号图标
    48 显示感叹号图标
    64 显示信息标记图标

    以上两个表并不涵盖 natType 的所有值。完整的列表请参阅 Win32 文档。
    返回值 intButton 指示用户所单击的按扭编号。若用户在 natSecondsToWait 秒之前不单击按扭,则 intButton 设置为 -1 。
    值 说明
    1 “确定”按扭
    2 “取消”按扭
    3 “终止”按扭
    4 “重试”按扭
    5 “忽略”按扭
    6 “是”按扭
    7 “否”按扭

    示例
    Set WshShell = Wscrīpt.CreateObject("Wscrīpt.Shell")
    WshShell.Popup "Where do you want to go today?"
    请参阅
    Wscrīpt.Echo 方法
    Wscrīpt.Echo
    Echo 方法在窗口(Wscrīpt.exe 中)或“命令提示符”窗口(Cscrīpt.exe 中)显示参数。
    参数用空格分隔。在 Cscrīpt.exe 中,该方法在显示最后一个参数之后输出一对回车/换行(CR LF)。
    语法
    Wscrīpt.Echo [anyArg...]
    示例
    Wscrīpt.Echo
    Wscrīpt.Echo 1, 2, 3
    Wscrīpt.Echo "Windows scrīpting Host is cool."
    WshShell.RegDelete
    RegDelete 从注册表中删除名为 strName 的键或值。
    语法
    WshShell.RegDelete strName
    参数
    strName
    如果 strName 以反斜杠 () 结束,则该方法删除键而不是值。
    strName 参数必须以下列之一的根键名开始:
    短根键名 长根键名
    HKCU HKEY_CURRENT_USER
    HKLM HKEY_LOCAL_MACHINE
    HKCR HKEY_CLASSES_ROOT
    HKEY_USERS
    HKEY_CURRENT_CONFIG

    示例
    Set WshShell = Wscrīpt.CreateObject("Wscrīpt.Shell")
    WshShell.RegDelete "HKCUscrīptEngineValue" '' Delete value "Value"
    WshShell.RegDelete "HKCUscrīptEngineKey" '' Delete key "Key"
    请参阅
    WshShell.RegRead 方法、WshShell.RegWrite 方法

    WshShell.RegRead
    RegRead 方法返回名为 strName 的注册表键或值。
    语法
    WshShell.RegRead(strName) = strValue
    参数
    strName
    如果 strName 以反斜杠 () 结束,则该方法返回键,而不是值。
    strName 参数必须以下列根键名开始。
    Short Long
    HKCU HKEY_CURRENT_USER
    HKLM HKEY_LOCAL_MACHINE
    HKCR HKEY_CLASSES_ROOT
    HKEY_USERS
    HKEY_CURRENT_CONFIG

    注释
    RegRead 方法仅支持 REG_SZ、REG_EXPAND_SZ、REG_DWORD、REG_BINARY 和 REG_MULTI_SZ 数据类型。若注册表有其他数据类型,RegRead 返回 DISP_E_TYPEMISMATCH。
    示例
    Set WshShell = Wscrīpt.CreateObject("Wscrīpt.Shell")
    WshShell.RegRead("HKCUscrīptEngineVal") '' Read from value "Val"
    WshShell.RegRead("HKCUscrīptEngineKey") '' Read from key "Key"
    请参阅
    WshShell.RegDelete 方法、WshShell.RegWrite 方法

    WshShell.RegWrite
    RegWrite 方法设置名为 strName 的注册表键或值。
    语法
    WshShell.RegWrite strName, anyValue, [strType]
    参数
    strName
    若 strName 以一个反斜杠 () 结束,则该方法设置键,而不是值。
    strName 参数必须以下列根键名开头。
    Short Long
    HKCU HKEY_CURRENT_USER
    HKLM HKEY_LOCAL_MACHINE
    HKCR HKEY_CLASSES_ROOT
    HKEY_USERS
    HKEY_CURRENT_CONFIG

    anyValue
    当 strType 为 REG_SZ 或 REG_EXPAND_SZ 时,RegWrite 方法自动将 anyValue 转换为字符串。若 strType 为 REG_DWORD,则 anyValue 被转换为整数。若 strType 为 REG_BINARY,则 anyValue 必须是一个整数。
    strType
    RegWrite 方法支持 strType 为 REG_SZ、REG_EXPAND_SZ、REG_DWORD 和 REG_BINARY。若其他的数据类型被作为 strType 传递,RegWrite 返回 E_INVALIDARG。
    示例
    Set WshShell = Wscrīpt.CreateObject("Wscrīpt.Shell")
    WshShell.RegWrite "HKCUscrīptEngineValue", "Some string value"
    WshShell.RegWrite "HKCUscrīptEngineKey", 1 "REG_DWORD"
    请参阅
    WshShell.RegDelete 方法、WshShell.RegWrite方法

    WshShell.Run
    Run 方法创建一个新的进程,该进程以 intWindowStyle. 窗口样式执行 strCommand。
    语法
    WshShell.Run (strCommand, [intWindowStyle], [blnWaitOnReturn])
    参数
    strCommand
    在 strCommand 参数内部的环境变量被自动扩展。
    intWindowStyle
    这是为新进程在 STARTUPINFO 结构内设置的 wShowWindow 元素的值。其意义与 ShowWindow 中的 nCmdShow 参数相同,可取以下值之一。名称 值 含义
    SW_HIDE
    0 隐藏窗口并激活另一窗口。
    SW_MINIMIZE
    6 最小化指定窗口并激活按 Z 序排序的下一个顶层窗口。
    SW_RESTORE
    9 激活并显示窗口。若窗口是最小化或最大化,则恢复到原来的大小和位置。在还原应用程序的最小化窗口时,应指定该标志。
    SW_SHOW
    5 以当前大小和位置激活并显示窗口。
    SW_SHOWMAXIMIZED
    3 激活窗口并以最大化显示该窗口。
    SW_SHOWMINIMIZED
    2 激活窗口并以最小化显示该窗口。
    SW_SHOWMINNOACTIVE
    7 最小化显示窗口。活动窗口保持活动。
    SW_SHOWNA
    8 以当前状态显示窗口。活动窗口保持活动。
    SW_SHOWNOACTIVATE
    4 按窗口最近的大小和位置显示。活动窗口保持活动。
    SW_SHOWNORMAL
    1 激活并显示一个窗口。若窗口是最小化或最大化,则恢复到其原来的大小和位置。

    blnWaitOnReturn
    如果未指定 blnWaitOnReturn 或其值为 FALSE,则该方法立即返回到脚本继续执行而不等待进程结束。
    若 blnWaitOnReturn 设为 TRUE,则 Run 方法返回由应用程序返回的任何错误代码。如果未指定 blnWaitOnReturn 或其值为 FALSE,则 Run 返回错误代码 0(zero)。
    示例
    '' This fragment launches Notepad with the current executed scrīpt
    Set WshShell = Wscrīpt.CreateObject("Wscrīpt.Shell")
    WshShell.Run ("notepad " & Wscrīpt.scrīptFullName)
    WshShell.Run ("%windir%notepad" & Wscrīpt.scrīptFullName)
    '' This fragment returns the error code from the executed application
    Return = WshShell.Run("notepad " & Wscrīpt.scrīptFullName, 1, TRUE)

  • 一位高人的QTP学习笔记(转)

    2009-05-11 10:55:42

    1、连接数据库查询例子,无参数化
    //查询收文操作,通过数据库查询记录数是否正确
    //1、输出记录数值,例如78条 2、获取输出的记录数值 3、连接数据库,查询记录数
    4、输出记录数值和从数据库中查询记录数值,相比较,相等则成功,不等则失败
    Browser("湛江信息化测试登录").Page("湛江东兴石油企业有限公司办公自动化系统").Frame("mainFrame").Output CheckPoint("78")
    Dim mm
    'mm=DataTable.GlobalSheet.GetParameter("mainFrameOutput_Text_out").Value  
    //注释,获取datatable值与DataTable("mainFrameOutput_Text_out", dtGlobalSheet)一致
    mm=DataTable("mainFrameOutput_Text_out", dtGlobalSheet)
    MsgBox mm
    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="select count(*) from oa_receivebumf  where BUMFNAMElike '%收文测试%'"
    'sql="select  count(*)  from oa_receivebumf  where BUMFNAME='"&nn&"'"
    //注释,sql语句,等于时sql语句
    // sql="select  count(*)  from oa_receivebumf  where BUMFNAME like '%nn%'" //like时sql语句
    Cmd.CommandText = sql
    Set res = Cmd.Execute()
    //msgbox res("name")

    MsgBox res(0)
    If   Cstr(res(0)) = Cstr(mm)Then
          Reporter.ReportEvent micPass, "test",   "查询成功"     
      else
    Reporter.ReportEvent micfail, "test",   "查询失败"
    End If
    Set res = nothing
    Set cmd.ActiveConnection = nothing
    Set Cmd= nothing
    2、登记用户,查看是否登记成功
       //登记用户,查询用户是否存在在数据库中
         1、参数化2、取参数化值  3、查询语句中,赋值给查询条件
         4、从数据库中查询出用户名,与参数化中值做比较
       脚本如下:
    Browser("测试登录").Page("办公自动化系统").Frame("mainFrame_2").WebEdit("addressVO.name").Set DataTable("p_Text", dtGlobalSheet)
    Dim xname
    xname=DataTable("p_Text", dtGlobalSheet)
    MsgBox  xname

    Dim res,cmd,sql
    Set res=createobject("adodb.recordset")
    Set cmd=createobject("adodb.command")
    Cmd.activec
    Cmd.CommandType = 1
    sql="select  name from address_list t where name ='"&xname&"'"
    Cmd.CommandText = sql
    Set res = Cmd.Execute()
    'msgbox res("name")
    MsgBox res(0)
    Set res = nothing
    Set cmd.ActiveConnection = nothing
    Set Cmd= nothing

     

     

    第二部分

    1、Datatable方法GetRowCount
       DataTable.GetSheet("Action1").GetRowCount   //获取总行数
      使用如:
      CountNum=DataTable.GetSheet("Action1").GetRowCount

    2、Datatable方法SetNextRow
       DataTable.GetSheet("Action1").SetNextRow     //取得下一行
       datatable.setcurrentrow(n)   //取得某一行

    3、Datatable方法getcurrentrow    //获得当前行数
       例如:datatable.getcurrentrow

    4、获取datatable值
       4.1  DataTable("p_Text", dtLocalSheet)  //取得datatable中参数名称为:p_Text的值
       4.2  DataTable.GlobalSheet.GetParameter("p_Text").Value   //获取参数值方法和DataTable("p_Text", dtLocalSheet)一样
       例如:xname为变量,dim xname
       xname=DataTable("p_Text", dtLocalSheet)
       xname=DataTable.GlobalSheet.GetParameter("p_Text").Value

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

    -----向某一列的单元格赋值:
    datatable.value("column_name",dtlocalsheet)="nanjing"

    6、字符转换Cstr
       dim mm
       Cstr(mm)

    7、获取对象属性名称用法:
    GetRoProperty----从应用程序界面上获取对象属性(即,是脚本运行时,获取的对象动态属性值)
               例如:获取对象库中index属性值,似乎只能用GetToProperty,因为应用程序界面上对象没有该属性,只是
          QTP为识别该对象创立的描述属性;
    GetToproperty----从对象库中描述对象的属性,静态值
    GetToProperties----获取用于标识对象的属性集;对于这个集合,有count等属性方法

    8、如果弹出对话框就获取上面提示信息并与表中的信息对比,不统一证明弹出的提示出错,主要用来验证
    if browser("web_name").dialog("dialog_name").exist(1) then'如果不出现=false
         error_message=browser("web_name").dialog("diaglog_name").static("用户密码错误!".getRoproperty("text")
       if error_message<>(datatable.value("error_info"))then
             msgbox(error_message)
          end if
         browser("web_name").dialog("diaglog_name").close
      end if
    这里总结了两点技巧:
      一是:对于dialog中,虽然提示信息对象名称是"用户密码错误",但如果信息对象名称是“该用户不存在”,不用更改会自动识别,我想主要是录制第一遍时,“用户密码错误”只是让运行时能找到这个控制,而不管它是什么内容,因为在对象仓库中,text不是决定该对象的属性
       二是:如果对于提示信息比较长的,可以用mid(error_message,n,m)取一部份特征提示信息进行验证,这样我想可以节省处理时间,又可以避免长度以及空格等字符的处理

    9、数据库检查点模块:
    sub database_check
    set con=createobject("adodb.connection")
    con.open "Description=IBM_ODBC;DRIVER=SQL Server;SERVER=IBM;UID=sa;"&_
                     "PWD=123456;APP=Quick Test Pro;WSID=IBM;DATABASE=IBM_table"
    'access方式:con.open "DRIVER={Microsoft Access Driver (*.mdb)};DBQ=d:\test.mdb"
    '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")
    sql="select*from ibm_one_table"
    record.open sql,con
    DO
    if(record("ibm_table_column")="kai")then'//查找表格中有多少kai
    num=num+1;
    end if
    record.movenext
    loop until record.eof=true
    record.close
    set record=nothing
    con.close
    set con=nothing
    end sub

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

    11、for方法1,参数化时选择:dtLocalSheet
    Dim CountNum
    CountNum=DataTable.GetSheet("Action1").GetRowCount
    For i=0 to CountNum-1
    ----xunhuanti------
    DataTable.GetSheet("Action1").SetNextRow    //使用SetNextRow方法
    Next

    12、for方法2,参数化时选择:dtLocalSheet
    dim countNum
    countNum = DataTable.GetSheet("Action1").GetRowCount
    For i=1 to countNum
    DataTable.GetSheet("Action1").SetCurrentRow(i)  //使用SetCurrentRow(i)方法
    ―――ddd―――
    next
    13、while方法1,参数化时选择:dtLocalSheet
    Dim CountNum,i
    i=1
    CountNum=DataTable.GetSheet("Action1").GetRowCount
    While i<=CountNum
    ------xuhuanti---
    DataTable.GetSheet("Action1").SetNextRow
    i = i+1
    Wend

    14、while方法2,参数化时选择:dtLocalSheet
    Dim CountNum,i
    i=1
    CountNum=DataTable.GetSheet("Action1").GetRowCount
    While i<=CountNum

    DataTable.GetSheet("Action1").SetCurrentRow(i)
    ----xuhuanti---
    i = i+1
    Wend

     

     

    第三部分

    15、Do while方法
    Dim i,RowCount '定义两个变量
    i=0
    RowCount=DataTable.GetSheet("Action1").GetRowCount '设置RowCount等于Action1中的行数。
    msgbox RowCount
    Do while i<rowcount
    i=i+1 '第一次进入循环,执行这句后,i=1
    'DataTable.GetSheet("Action1").SetCurrentRow(i)  这句话被我注释掉了,正确的写法应该是下面这样,分开写。

    datatable.getsheet("Action1")
    datatable.setcurrentrow(i)

    ----xunhuanti----
    loop

    16、取对象属性(Property)值

    Dim usname
    usname =Browser("测试登录").Page("办公自动化系统").Frame("mainFrame_2").WebEdit("addressVO.name").GetRoProperty("Value")   '获取对象属性(Property)值,如Property为Value
    MsgBox usname

    17、取得要删除的id,并删除
    'url在查看该新增记录的信息页面对象中取得,所以录制的时候,登记,查看(修改),删除

    Dim strUserid,id,strId

         id=Browser("测试登录").Page("办公自动化系统").Frame("mainFrame_4").GetROProperty("url") '在url这个属性值中存在我需要删除记录的ID信息
      strId=Mid (id,instr(60,id,"=")+1)  '这一步是把需要的id值取了出来,例如:strId=Mid (id,instr(1,id,"=")+1)
         strUserid =strId  'strUserid是我要删除的记录前的复选框属性值当中的ID信息
    Browser("测试登录").Page("办公自动化系统").Frame("mainFrame").WebCheckBox("value:="&strUserid).Set "ON"这样就把想删除的记录选中了。
    Browser("测试登录").Page("办公自动化系统").Frame("mainFrame").WebButton("删除").Click '这样就删除掉啦,呵呵

    17.2通过数据库取得id值,并赋值进行删除

    Browser("测试登录").Page("办公自动化系统").Frame("mainFrame_2").WebEdit("addressVO.name").Set DataTable("p_Text", dtGlobalSheet)
    Browser("测试登录").Page("办公自动化系统").Frame("mainFrame_2").WebEdit("addressVO.address").Set DataTable("p_Text1", dtGlobalSheet)

    Browser("测试登录").Page("办公自动化系统").Frame("mainFrame_2").WebEdit("addressVO.unitTel").Set DataTable("p_Text2", dtGlobalSheet)

    Dim xname,address,unitTel
    xname=DataTable("p_Text", dtGlobalSheet)   '
  • QTP经常用到的函数和程序

    2009-05-08 09:58:13

    1. 创建一个vbs文件:TestVbs.vbs
    内容如下:

    Sub CloseWeb() 软件开发网 www.mscto.com

    '         此处可以用到描述性编程,把先期打开的IE窗口全关闭
    Dim WinIe,Ie,i,m
    Set WinIe=descrīption.Create()
    WinIe("regexpwndtitle").value=" Microsoft Internet Explorer"  '所有页面的regexpwndtitle属性值都是" Microsoft Internet Explorer",也可以用其他属性
    Set Ie=desktop.ChildObjects(WinIe)
    m=Ie.count
    For i=1 to m
            Ie(i-1).close                 ' 0为最后打开的一个,可关闭打开的几个,,循环改成for i=1 to m
    Next
    End Sub


    function TestVbs(format)
            msgbox "参数是" & format
    end function


    '往文件里面写内容
    '第一个参数 文件的路径
    '第二个参数:写入的内容
    '第三个参数:写入的格式("Appending/Writing")
    ' See also "FileSystemObject"
    Sub Write2File(FilePath,content,style)
       Dim fso,f
       Dim stl
            If Ucase(style)="APPENDING" Then
                    stl=8
            else
                    if Ucase(style)="WRITING" then
                                    stl=2
                    else
                                            reporter.ReportEvent 1,"参数错误","Writing <" & FilePath &">:<"& content &">With<" & style. & ">"


                                    Exit Sub
                    end if
            End If 
       Set fso=CreateObject("scrīpting.FileSystemObject")
       Set f=fso.OpenTextFile(FilePath,stl,true)
       'content="写入的第一行内容"
       f.WriteLine(content)
       f.Close
       Set f=nothing
       Set fso=nothing

    End Sub

    ' 连接数据库子程序
    ' 第一个参数:根据数据库的类型,设计连接字符串(参见udl文件)
    ' 第二个参数:连接数据库之后,进行查询的相应语句
    ' 第三个参数:查询记录返回到res
    Sub OpenDB(conn,sql,res)
       Set cnn=CreateObject("adodb.connection")
       cnn.open conn
       Set res=CreateObject("adodb.recordset")
       res.open sql,cnn,1,1
       
    End Sub


    ' 关闭数据库的连接
    sub CloseDB
       Set res=nothing
            Set cnn=nothing
    end sub


    2. QTP导入这个TestVbs.vbs 文件:
    菜单:Test-->Setting-->Resource
    在“Associated Library Files” 添加入该文件
    这里建议可以使用 相对路径,如..\TestVbs.vbs

    3. 测试封装的子程序:
    用“Run from steps”运行模式(专家视图 右键,第四个菜单项,脚本从光标处运行)
    在QTP 中添加测试代码:

    CloseWeb()    '实现关闭当前所有的IE窗口
    stop


    ' 调用外部函数 Write2File
    Write2File "c:\File.txt","Writhing a Line","Writing"
    Write2File "c:\File.txt","Appending a Line","Appending"
    Write2File "c:\File.txt","Appending a Line","Appending!"   ' 参数不正确
    Write2File ".\vbs\File.txt","Appending a Line","Appending"
    stop


    '~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    ' 设置连接数据库所需要的初始值,包括:
    ' conn :数据库连接字符串
    ' sql:查询的SQL语句
    ' res:查询的返回记录 软件开发网 www.mscto.com

    Dim conn,sql,res
    conn="Provider=MSDASQL.1;Persist Security Info=False;Data Source=QT_Flight32"
    sql="select * from Orders"
    Set res=nothing

    ' 调用外部子程序 OpenDB 进行连接数据库
            OpenDB conn,sql,res
                    'msgbox res.RecordCount&"行," & res.fields.count & "列"
                    res.MoveFirst
               ' res.MoveNext    没有它的话,记录就成了死循环
              
                    'reporter.ReportEvent 2,"测试连接数据库","数据库获取数据:" & res.fields(0)

            RowCount=res.RecordCount
            ColumnCount=res.fields.count
            While not res.eof
                    Record=""
                    For i=0 to ColumnCount-1
                            Record=Record & ":" &res.fields(i)
                    Next
                            Record=mid(Record,2)
                            reporter.ReportEvent 2,"数据库记录:",Record


                    res.MoveNext
            Wend
     
    ' 调用外部子程序 CloseDB关闭数据库
            CloseDB
  • QTP连接数据库进行增删改查脚本(转)

    2009-05-08 09:55:40

    步骤:
    1、首先创建数据源
    2、在QTP的Exper View中开发脚本如下脚本

    增删改脚本为:

    Dim conn,strSql   '定义变量
    set conn = CreateObject("ADODB.Connection")  '创建连接
    conn.ConnectionString="DSN=test_access_odbc;DBQ=E:\test.mdb;DriverId=25;FIL=MS Access;MaxBufferSize=2048;PageTimeout=5;"  '设置连接字符串
    conn.open '开启连接
    'strSql="insert into email_value values(11,'123')" '设置插入语句
    'strSql="update email_value set email_value='tester' where ID=11"
    strSql="delete from email_value where ID=11"
    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


    查询脚本为:

    Dim conn,res,strSql   '定义变量
    set conn = CreateObject("ADODB.Connection")  '创建连接
    conn.ConnectionString="DSN=test_access_odbc;DBQ=E:\test.mdb;DriverId=25;FIL=MS Access;MaxBufferSize=2048;PageTimeout=5;"  '设置连接字符串
    conn.open '开启连接
    Set res = CreateObject("ADODB.RecordSet")  '创建一个记录集对象
    strSql="select * from email_value" '设置查询雨具
    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
    <!--[if !supportLineBreakNewLine]-->
    <!--[endif]-->

  • QTP参考资料收集(7)

    2009-04-01 21:47:25

    7、数据库链接和检查

    a)数据库检查点模块:

    sub database_check
    set con=createobject("adodb.connection")
    con.open "Description=IBM_ODBC;DRIVER=SQL Server;SERVER=IBM;UID=sa;"&_

    "PWD=123456;APP=Quick Test Pro;WSID=IBM;DATABASE=IBM_table"
    'access方式:con.open "DRIVER={Microsoft Access Driver (*.mdb)};DBQ=d:\test.mdb"
    '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")
    sql="select*from ibm_one_table"
    record.open sql,con
    DO
    if(record("ibm_table_column")="kai")then'//查找表格中有多少kai
    num=num+1;
    end if
    record.movenext
    loop until record.eof=true
    record.close
    set record=nothing
    con.close
    set con=nothing
    end sub

    b)数据库检查点手动SQL写法

    QTP插入数据库检查点,手动指定SQL语句的写法。

    一、SQL Server格式(本地无需安装SQL Server)

    connectionstring(连接字符串):

    1.本地没有创建数据源的方式

    DRIVER=SQL Server;SERVER=数据库IP地址;UID=用户名;PWD=密码;APP=Microsoft Office 2003;WSID=本地主机名;DATABASE=数据库名

    实例:

    DRIVER=SQL Server;SERVER=10.160.11.10;UID=sa;PWD=sa;APP=Microsoft Office 2003;WSID=RJHLJUN;DATABASE=dcwork

    2.本地已创建数据源的方式

    DSN=数据源名称;UID=用户名;PWD=密码;APP=Microsoft Office 2003;WSID=数据库的主机名;DATABASE=数据库名

    实例:

    DSN=LocalServer;UID=sa;PWD=sa;APP=Microsoft Office 2003;WSID=RJDCWORKTEST;DATABASE=dcwork

    3.SQL语句实例(从数据库表HR_LANGUAGE_TYPE中,查询字段语言名称LANGUAGE_NAME,条件语言名称=中文,按语言名称升序排序结果)

    source(SQL语句):

    SELECT HR_LANGUAGE_TYPE.LANGUAGE_NAME  FROM dcwork.dbo.HR_LANGUAGE_TYPE HR_LANGUAGE_TYPE  WHERE (HR_LANGUAGE_TYPE.LANGUAGE_NAME='中文')  ORDER BY HR_LANGUAGE_TYPE.LANGUAGE_NAME

    二、DB2格式:

    (本地至少安装DB2 Run-Time Client Lite)

    connectionstring(连接字符串):

    1.本地没有创建数据源的方式

    DRIVER={IBM DB2 ODBC DRIVER};UID=用户名;PWD=密码;MODE=SHARE;DBALIAS=数据库名;

    实例:

    DRIVER={IBM DB2 ODBC DRIVER};UID=db2admin;PWD=db2admin;MODE=SHARE;DBALIAS=DCWORK;

    2.本地已创建数据源的方式

    DSN=数据源名称;UID=用户名;PWD=密码;MODE=SHARE;DBALIAS=DCWORK;

    实例:

    DSN=DWCORKDB2;UID=db2admin;PWD=db2admin;MODE=SHARE;DBALIAS=DCWORK;

    3.SQL语句实例

    source:SQL语句

    SELECT HR_LANGUAGE_TYPE.LANGUAGE_NAME  FROM DB2ADMIN.HR_LANGUAGE_TYPE HR_LANGUAGE_TYPE  WHERE (HR_LANGUAGE_TYPE.LANGUAGE_NAME='中文')  ORDER BY HR_LANGUAGE_TYPE.LANGUAGE_NAME

    三、Oracle格式:(本地需要安装Oracle ODBC DRIVER)

    connectionstring(连接字符串):

    1.本地没有创建数据源的方式

    DRIVER={Oracle in OraHome92};SERVER=数据库服务名;UID=用户名;PWD=密码;DBQ=数据库名;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;

    实例:

    DRIVER={Oracle in OraHome92};SERVER=DCWORK;UID=DCWORK;PWD=DCWORK;DBQ=DCWORK;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;

    2.本地已创建数据源的方式

    DSN=数据源名称;UID=用户名;PWD=密码;DBQ=数据库名;DBA=W;APA=T;EXC=F;FEN=T;QTO=T;FRC=10;FDL=10;LOB=T;RST=T;GDE=F;FRL=F;BAM=IfAllSuccessful;MTS=F;MDI=F;CSR=F;FWC=F;PFC=10;TLO=0;

    实例:

    DSN=dcworkoracle;UID=DCWORK;DBQ=DCWORK;DBA=W;APA=T;EXC=F;FEN=T;QTO=T;FRC=10;FDL=10;LOB=T;RST=T;GDE=F;FRL=F;BAM=IfAllSuccessful;MTS=F;MDI=F;CSR=F;FWC=F;PFC=10;TLO=0;

    3.SQL语句实例

    source:SQL语句

    SELECT HR_LANGUAGE_TYPE.LANGUAGE_NAME  FROM DCWORK.HR_LANGUAGE_TYPE HR_LANGUAGE_TYPE  WHERE (HR_LANGUAGE_TYPE.LANGUAGE_NAME='中文')  ORDER BY HR_LANGUAGE_TYPE.LANGUAGE_NAME

    c)QTP与oracle连接取值

    Dim Cnn, Rst, strCnn

    strCnn="DSN=Start_No;UID=SYMBOLS;PWD=SYMBOLS;DBQ=UATDATA;DBA=W;APA=T;EXC=F;FEN=T;QTO=T;FRC=10;FDL=10;LOB=T;RST=T;GDE=F;FRL=F;BAM=IfAllSuccessful;MTS=F;MDI=F;CSR=F;FWC=F;PFC=10;TLO=0;"

    Set Cnn = CreateObject("ADODB.Connection")

    Cnn.Open strCnn

    Set Rst =CreateObject("ADODB.Recordset")

    Rst.open "select CHEQUE_NO from RB_CHEQUE_DETAIL where BRANCH = '1700' AND CCY = 'CNY' AND CHEQUE_TYPE = 'AB'  AND PREFIX = 'AA'  AND CHEQUE_STATUS ='DIS'",cnn,1,1

    rst.movefirst

    Const ForReading = 1, ForWriting = 2

    Dim fso, f, ts, i

    Dim TextStreamTest

    Set fso = CreateObject("Scripting.FileSystemObject")

    fso.CreateTextFile "d:/cheque_no.txt"

    Set f = fso.GetFile("d:/cheque_no.txt")

    i =rst.fields("CHEQUE_NO")

    Set ts = f.OpenAsTextStream(ForWriting, TristateUseDefault)

    rst.movenext

    ts.Write i

    ts.Close

    rst.close

    cnn.close

    set rst=nothing

    Set cnn=nothing


     

  • QTP参考资料收集(6)-4

    2009-04-01 21:44:37

    d)   模板的应用

    新建一个文本,输入一些新建Action时常包含的信息,然后保存为ActionTemplate.MST文件,并复制到QTP/dat目录下;这样每次新建action都会包含固定的信息了;
    例如
    :
    '-------------------
    脚本说明
    ---------------
    '
    产品版本

    '
    测试员
    :
    '
    编写日期
    :
    '
    测试功能
    :
    '
    脚本类型
    :
    '
    被测试对象初始状态
    :
    '
    进展程度
    :
    '
    …………

    '--------------------
    脚本内容-------------

    e)        方式与级别

    Analog recording(模拟录制 )

    模拟录制用于您要在其中录制鼠标的实际移动的应用程序。这些可能包括绘制鼠标签名或者使用通过拖动鼠标创建图像的绘图应用程序。您可以用模拟录制模式相对于屏幕或特定窗口进行录制。
       
    相对于指定窗口录制 - 如果对其执行操作的对象位于一个窗口内部而且该窗口在模拟录制会话期间没有移动。这可以确保在运行会话过程中,QuickTest 将准确地标识在其上执行模拟步骤的窗口位置,即使当您运行模拟步骤时窗口位于不同的位置。QuickTest 不会录制在指定窗口外部执行的任何单击或鼠标移动。当使用这种模式时,QuickTest 不会捕获任何 Active Screen 图像。
       
    相对于屏幕录制 - 如果在其上录制模拟步骤的窗口在录制过程中移动,或者您所执行的操作是针对位于多个窗口内的对象。这可能包括将对象从一个窗口拖放到另一个窗口中。当使用这种模式时,QuickTest 将捕获您在其中进行录制的窗口的最终状态的 Active Screen 图像。
       
    使用模拟录制录制的步骤被保存在单独的数据文件中。该文件与在其中录制模拟步骤的操作或组件一起存储。
       
    当以模拟录制模式进行录制时,QuickTest 将向测试或组件添加一个调用所录制的模拟文件的“RunAnalog”语句。相应的 Active Screen 将显示在模拟录制会话期间执行的最后一个模拟步骤的结果。
    low-level recording(
    低级录制)
       
    使用低级录制在不受 QuickTest 支持的环境或对象上进行录制。当您需要在应用程序屏幕上录制操作的精确位置时,请使用低级录制。当以正常模式录制时,QuickTest 将在对象上执行步骤,即使该对象已经移动到屏幕上的新位置。如果对象的位置对于您的测试或组件非常重要,请切换到低级录制以使 QuickTest 能够按照屏幕上的 x 坐标和 y 坐标录制该对象。这样,该步骤只有在对象位于正确的位置时才能通过。

       
    当使用低级录制时,QuickTest 将所有父类对象录制为 Windows 测试对象,将所有其他对象录制为 WinObject 测试对象。它们在 Active Screen 中显示为标准 Windows 对象。低级录制对每个测试对象支持下列方法:
    WinObject 测试对象 - ClickDblClickDragDropType
    Window
    测试对象 - ClickDblClickDragDropTypeActivateMinimizeRestore
    Maximize
       
    低级录制模式录制的每个步骤都显示在关键字视图和专家视图中。(模拟录制仅录制关键字视图中那个调用外部模拟数据文件的步骤。)

    模拟录制和低级录制的规则
       
    模拟录制和低级录制产生的脚本无法插入检查点,而且应用程序界面稍有变动则脚本无法正常运行,所以非万不得已(QTP正常支持的B/S结构以外的情况)应该避免这两种录制方式。有时候因为无法正常录制或者无法正常运行,初学者就可能考虑使用这两种方式录制,事实上,只要是C/S(其实部分结构简单一点的B/S)结构,基本上都能够避免所遇到的这些问题,具体方法,参见第二部分。

    当选择模拟录制低级录制时,请考虑下列规则:

    只有当 QuickTest 的正常录制模式不能准确录制您的操作时,才应使用模拟录制低级录制模拟录制低级录制要求比正常录制模式更多的磁盘空间。对于特定的步骤,您可以在录制会话期间切换到模拟录制低级录制。在以模拟录制低级录制模式录制了必要的步骤之后,就可以返回到正常录制模式来完成录制会话的其余部分。

  • QTP参考资料收集(6)-3

    2009-04-01 21:29:42

    c)规范例程

    脚本的生成方式就两种,一种是自写脚本,一种是录制生成。常常听见有人说,这两种方式中首选录制生成脚本,因为它简单且智能化。但我个人总觉得手写脚本要好一些,因为:

             可读性好,流程清晰,检查点截取含义明确。业务级的代码读起来总比协议级的代码更易让人理解,也更容易维护,必要时可建立一个脚本库。而录制生成的代码大多没有维护的价值,现炒现卖。

             手写程序相比录制脚本更能增加测试人员的技术含量。开发和测试能力双重提高,何乐而不为呢?QTP提供了java uservb user,等语言类型的脚本,就是给我们开发脚本用的,而不是录制用的。

    脚本不管录制也好,还是手写也好,选择的时候应该以脚本模拟程序真实有效为准,结合项目进度,开发难易程度等因素考虑。而脚本的开发也需要符合一种规范,也可以说是一种习惯,因为脚本不只是开发者一个人看,测试执行人员也需要看,这就要求可读性和可维护性提高;故而开发时应该考虑这层因素,规范一下。

    下面这段某系统登陆的脚本,是一位前辈写的,引用一下(借机崇拜一下):

    '*************************************************************************

    '*  模板名称:          Login

    '*  开发人员:          LY

    '*  开发日期:          2006-10-12

    '*  最后修改日期:        2006-10-13

    '*  输入参数:          用户名、密码

    '*  输出参数:          成功进入

    '*  脚本描述:          通用的登陆设计

    '***********************************************************************

    Dim hint_msg
    Dim hint
    Dim ActualDialogPopup
    InvokeApplication "D:\Program Files\Mercury Interactive\QuickTest Professional\samples\

    flight\app\flight4a.exe"
    '
    参数化userpassword

    Dialog("Login").WinEdit("Agent Name:").Set DataTable("user"
    dtGlobalSheet)
    Dialog("Login").WinEdit("Password:").Set DataTable("password"
    dtGlobalSheet)
    Dialog("Login").WinButton("OK").Click
    hint = DataTable("hint"
    dtGlobalSheet)

    ' 判断弹出错误提示框的正确性,如果输入了正确密码,而用户名又大于4个字符则不弹出错误提示框,否则弹出错误提示框。

    If Dialog("Login").Dialog("Flight Reservations").Exist then
            ActualDialogPopup = "TRUE"
    else
            ActualDialogPopup = "FALSE"
    end if
    ExpectedDialogPopup = DataTable("ExpectedDialogPopup"
    dtGlobalSheet)
    If (ActualDialogPopup = ExpectedDialogPopup) then
            Reporter.ReportEvent micpass
    "登陆" "程序判断正确
    ."
            '
    如果弹出错误提示框,通过对比
    hint
            If  ActualDialogPopup = "TRUE" Then
              hint_msg = Dialog("Login").Dialog("Flight Reservations").Static("Static").GetROProperty("text")
                    If (hint = hint_msg) Then
                            Reporter.ReportEvent micpass
    "登陆错误提示" "错误提示信息正确
    ."
                    else
                          Reporter.ReportEvent micFail
    "登陆错误提示" "错误提示信息错误
    ."
                    End if
                          Dialog("Login").Dialog("Flight Reservations").WinButton("
    确定
    ").Click
                    Dialog("Login").Close
            else
                 Window("Flight Reservation").Close
            End If
    else
       Reporter.ReportEvent micfail
    "登陆" "程序判断错误
    ."
       If  ActualDialogPopup = "TRUE" Then
         Dialog("Login").Dialog("Flight Reservations").Close
         Dialog("Login").Close
      else
         Window("Flight Reservation").Close
      end if
    End If

  • QTP参考资料收集(6)-2

    2009-03-31 20:03:08

    a)        检查点概述

    在录制会话过程中或在编辑测试或组件时添加检查点。在录制了初始测试或组件之后,通常可以更为方便地定义检查。有几种方法可以添加检查点。

    在录制或编辑时添加检查点

             使用插入菜单上的命令,或者单击测试工具栏上的插入检查点按钮旁边的箭头。这将显示与关键字视图的选定步骤相关的检查点选项的菜单。

    只在编辑时添加检查点

             右键单击关键字视图中您要添加检查点的步骤,然后选择插入标准检查点

             右键单击 Active Screen 中的任意对象,然后选择插入标准检查点。可使用该选项为 Active Screen 中的任意对象创建检查点(即使该对象不是关键字视图中任一步骤的组成部分)。

    注意:

    如果使用“Active Screen”方法,请确保 Active Screen 包含有关待检查对象的充足数据。

    了解检查点类型

    检查点类型

    描述

    用法示例

    标准检查点

    检查对象的属性值。

    检查是否选中某单选按钮。

    图像检查点

    检查图像的属性值。

    检查图像源文件是否正确。

    表检查点

    检查表中的信息。

    检查表单元格中的值是否正确。

    页面检查点

    检查网页的特性。

    检查加载网页所需的时间,或者检查网页是否包含中断链接。

    文本/文本区域检查点

    检查文本字符串是否显示在网页或应用程序窗口中的适当位置。

    检查预期的文本字符串是否显示在网页或对话框上的预期位置。

    位图检查点

    将网页或应用程序的某个区域捕获为位图后对其进行检查。

    检查网页或网页的任何部分是否能按预期显示。

    数据库检查点

    检查应用程序或网站所访问的数据库内容

    检查数据库查询中的值是否正确。

        可访问性检查点

    对网站区域进行识别,以检查是否符合 508 部分。

    检查网页上的图像是否包含 ALT 属性(该属性是 W3C Web 内容可访问性规则所要求的)。

    XML 检查点

    检查 XML 文档的数据内容。

    注意:XML 文件检查点用于检查特定的 XML 文件;XML 应用程序检查点用于检查网页中的 XML 文档。

    您可以插入下列检查点类型以检查网站或应用程序中的各种对象。

             “标准检查点检查应用程序或网页中对象的属性值。标准检查点会检查各种对象,如按钮、单选按钮、组合框、列表等等。例如,您可以检查在选择单选按钮之后它是否处于激活状态,或者可以检查编辑字段的值。标准检查点在所有加载项环境中都受到支持。

             “图像检查点检查应用程序或网页中的图像的值。例如,您可以检查所选图像的源文件是否正确。

    注意:可以通过在图像对象上插入标准检查点来创建图像检查点。图像检查点在 Web 环境中受到支持。

             “位图检查点检查位图格式的网页或应用程序区域。例如,假设您有一个网站,可以显示用户指定的城市的地图。该地图具有用于缩放的控制键。在单击放大地图的控制键后,您可以录制所显示的新地图。使用位图检查点,您可以检查该地图是否正确放大。位图检查点在所有加载项环境中都受到支持。

             “表检查点检查表内部的信息。例如,假设您的应用程序或网站包含一个表,该表列出了从纽约到旧金山的所有可用航班。您可以添加一个表检查点,以检查该表中的第一个航班的时间是否正确。

    注意:可以通过在表对象中插入标准检查点来创建表检查点。表检查点在 Web ActiveX 环境中受到支持。表检查点还在很多外部加载项环境中受到支持。

             “文本检查点检查文本字符串是否显示在应用程序或网页的适当位置中。例如,假设您的应用程序或网页显示句子:从纽约到旧金山的航班。您可以创建一个文本检查点,检查词语纽约是否显示在到旧金山的航班之间。文本检查点在所有加载项环境中受到支持(请参阅下面的受支持的检查点)。

             “文本区域检查点检查文本字符串是否按照指定的条件显示在 WindowsApplications 中所定义的区域内。例如,假设您的 Visual Basic 应用程序有一个按钮,显示查看文档< 号码>”,其中< 号码> 会被输入到应用程序中其他位置的窗体的四位数字代码替换。您可以创建一个文本区域检查点,以确认在该按钮上显示的号码与在窗体中输入的号码相同。文本区域检查点在标准 WindowsVisual Basic ActiveX 加载项环境中受到支持。文本区域检查点还在一些外部加载项环境中受到支持。

             “可访问性检查点确定可能不符合万维网联盟 (W3C) Web 内容可访问性规则的网站区域。例如, W3C Web 内容可访问性规则的规则 1.1 要求您为每个非文本元素提供等效文本。您可以添加“Alt”属性检查,检查按照该规则要求具有“Alt”属性的对象是否确实具有这样的标记。可访问性检查点在 Web 环境中受到支持。

             “页面检查点检查网页的特性。例如,您可以检查加载网页所需的时间,或者检查网页是否包含损坏的链接。

    注意:可以通过在页面对象上插入标准检查点来创建页面检查点。页面检查点在 Web 环境中受到支持。

             “数据库检查点检查由您的应用程序访问的数据库的内容。例如,您可以使用数据库检查点来检查网站上包含航班信息的数据库的内容。数据库检查点在所有环境中都受支持(请参阅下面的受支持的检查点)。

             “XML 检查点检查 XML 文件中的 XML 文档的数据内容,或检查网页和帧中的 XML 文档的数据内容。有关 XML 检查点的详细信息,请参阅第 11 检查 XML”XML 检查点(网页/ 帧)在 Web 环境中受到支持; XML 检查点(文件)在所有环境中受到支持(请参阅下面的受支持的检查点)。

  • QTP参考资料收集(6)-1

    2009-03-31 16:14:48

    QTP常用快捷方式

    下表这些快捷方式是我们经常用得到的,而其它的快捷方式记忆起来比较复杂,具体参见QTP的帮助文档:

    Command

    Shortcut Key

    Function

    Record (普通录制)

    F3

    Starts a recording session.

    Run (运行)

    F5

    Starts a run session from the beginning or from the line at which the session was paused.

    Stop (停止)

    F4

    Stops the recording or run session.

    Run from Step (丛当前步骤运行)

    Ctrl+F5

    Starts a run session from the selected step.

    Analog Recording (模拟录制)

    Shift+Alt+F3

    Starts recording in analog recording mode.

    Low Level Recording(低级录制)

    Ctrl+Shift+F3

    Starts recording in low level recording mode.

    Object Repository(打开对象库)

    Ctrl+R

    Opens the Object Repository dialog box.

    Step Into (单步调试运行到)

    F11

    Runs only the current line of the script. If the current line calls a method the method is displayed in the view but is not performed.

    Step Over (跳出断点)

    F10

    Runs only the current line of the script. When the current line calls a method the method is performed in its entirety but is not displayed in the view.

    Step Out (跳过断点)

    Shift+F11

    Runs to the end of the method then pauses the run session. (Available only after running a method using Step Into.)

    Run to Step (运行到)

    Ctrl+F10

    Runs until the current step.

    Add to Watch (添加到观察表)

    Ctrl+T

    Adds the selected item to the Watch tab.

    Insert/Remove Breakpoint (断点)

    F9

    Sets or clears a breakpoint in the test.

    Enable/Disable Breakpoint

    (启用/停用断点)

    Ctrl+F9

    Enables or disables a breakpoint in the test.

    Clear All Breakpoints

    (清除所有端点)

    Ctrl+Shift+F9

    Deletes all breakpoints in the test.

    Check Syntax (语法检查)

    Ctrl+7

    Checks the syntax of the active document.

     

  • QTP参考资料收集(5)

    2009-03-31 16:13:16

    5、QuickTest Plus小工具,大作用

    象我这样初学QTP的朋友刚开始时很可能没有注意到QuickTest Plus,因为QTP安装后默认是

    没有安装plus的,千回百转知道了plus,大概看了看,发现plus虽然都是些辅助性的小工具,但

    往往会给你的工作带来事半功倍的效果。

     

    一、安装QuickTest plus

     

      QTP安装后,在 程序 > QuickTest Professional下点击QuickTest Plus,然后按照提示一步步往下安装即可,

      其中要求输入序列号,输入和QTP安装时相同的序列号就可以了(8888-8888888888)。

     

    二、提示和技巧

     

      plus不仅提供了一些工具,还在它的帮助手册里给出了一些提示和技巧,以及一些实用的Function。

      在这里我把一些比较常用的好东东贴出来,其他的就看plus的帮助吧。

     

    1、创建action template.

        当希望在每一个新建action时都增加一些头部说明,比如作者、创建日期、说明等,用action template

        来实现最简单快捷。

        方法:用记事本等文本编辑器,输入如下类似的内容:

              'Company: xxxx

              'Author: xxx

              'Product: xxx

              'Date: xx

             然后将文件保存为ActionTemplate.mst,并存放到QTP安装目录下的dat目录,重启QTP,新建一个action试试,新建的action会包含以上信息。

     

    2、关于设置测试报告里只显示error的信息。

        帮助中说:修改安装目录下bin\QTReport.ini文件,增加以下内容:

             [FilterDialog]

             ReportAppDefaultFilter=1 # for error only

             ReportAppDefaultFilter=3 # shows all messages (default)

        但根据我的测试结果,不尽其然:

         1)当ReportAppDefaultFilter=1时,如果Object Repository中缺少对象,在报告中会在相应的

           action前打叉,但不会提示具体错误,而成功的步骤都有具体信息显示。

         2)用Reporter.ReportEvent测试的结果是:

            ReportAppDefaultFilter=1时,只显示micDone的具体信息;

            ReportAppDefaultFilter=2时,只显示micFail的具体信息;

            ReportAppDefaultFilter=3时,只显示micDone和micFail的具体信息;

            ReportAppDefaultFilter=4时,只显示micPass的具体信息;

     

        似乎无规律可寻,所以我的结论暂时是:不要设置这个参数,用默认的,显示所有信息,更多的信息有利于分析结果。

     

    3. 启动IE的语句:SystemUtil.Run "iexplore.exe", "http://www.mercuryinteractive.com"

    4. 关闭IE或其他程序的语句:SystemUtil.CloseProcessByName "app.exe"

         or  SystemUtil.CloseProcessByWndTitle "Some Title"

     

    三、Function Libraries

     

        plus的帮助中提供了一些常用的Function,把这些function copy到文本编辑器中保存为.vbs文件,并添加到Resources中就可以直接调用了,

      或直接copy到你的action中,就可以在当前的action中调用。更推荐第一种方法,所有的action都可以调用。

     

    1、文件操作相关的function,如下,望名则可生意:

        Function CreateFile(sFilename, bOverwrite);

        Function OpenFile(sFilename, iomode, create);

        Function AppendToFile(sFilename, sLine);

        Function WriteToFile(sFilename, sLine);

       

    2、Function NormalizeString(OrgStr); (将字符串变成regular express)

     

    3、GlobalDictionary的使用,这是另外一种可以共享全局变量的方法,在所有的action中,包括local和external action中都可以访问。

     

    4、使用文件系统相关的function:

        Function ReadLineFromFile (byref FileRef);

        Sub FileDelete ( FilePath);

        Function FileCompare (byref FilePath1, byref FilePath2, byref FilePathDiff, ignoreWhiteSpace);

        Function CheckFileExists (FilePath)

     

    5. web table相关的function:

        Function ItemByKeyColumn(): 根据table中某列的值,得到同一行中另一列的对象。(这个功能非常有用。)

        Function ObjectsByMicClass(Obj, micClass): 得到table中所有的micClass类型的对象集合。

     

     

    四、工具

      1、Automation Generator Utility

         添加一系列动作,然后自动完成。如:启动QTP,然后执行test1, test2, test3...,最后关闭QTP,还可以连接或断开Quality center.

         值得注意的是,每个test都可以分别指定test result文件,这样可以把所有test result指定到同一个目录下,所有test执行完成后,

         用Test Result Viewer就可以快速的查看测试报告。

     

      2、External Action Call Modifier Utility

         外部Action调用修改工具。当删除一个Reusable action前,如果没有先删除其他test中对它的调用,则打开其他test时,会提示找不到某某

         action,这种情况下启用该工具,工具会列出test下所有调用的外部action(如果调用的action是使用相对路径,则不会列出来),如果外部

         action找不到,会用红色的问号表示,删除它并保存后就OK了。

         也可以在此处修改外部action的来源,修改后原来的action parameter仍会保留。

      3、Repository Merge Utility

         合并多个对象库文件中的对象,如果出现冲突,可以选择忽略,或手工合并,或自动合并。

         对象库文件是Action目录下的Resource.mtr文件。

     

      4. Report Analyzer

         Test Result的另一个查看工具,提供了一些过滤条件,比如只查看failed step, 或只查看checkpoints,或只查看某个action。

     

    先就写这么多了,抛砖引玉,希望你能发现你想要的东西。写得不对的,不要客气,请指出来,不胜感激。

  • QTP参考资料收集(4)

    2009-03-31 16:11:46

    4、QTP连接数据库

    一、OLE-DB连接方式 

    1  字符串方式

    ConnectionString="Provider=SQLOLEDB.1; Data Source=YourSrc;

    UID=YourUid; PWD=YourPwd; Database=YourDB"

    ConnectionString="Provider=SQLOLEDB.1; Data Source=YourSrc;

    User ID=YourUid; Password=YourPwd; Initial Catalog=YourDB"

    其中,Provider为服务于连接的底层OLE-DB数据供应程序的名称;Data Source为服务于底层数据供应程序的数据源名称;UID或User ID为连接时使用的用户名;PWD或Password为连接时使用的密码;Database或Initial Catalog为位于数据库服务器上的一个特定数据库。

    2  数据链接文件方式

    创建一个空文本文件,将其扩展名改为.udl来创建一个数据链接文件。双击该文件打开Data Link Properties对话框,在Provider页选择提供者(不要选择基于ODBC的提供者,因为这样实际上是间接藉由ODBC实现数据库连接),在Connection页指定实现连接的细节。使用数据链接文件进行连接的ConnectionString如下:

    ConnectionString="File Name=C:YourFile.udl"

    用记事本打开数据链接文件,可以看到第三行文本是一个连接字符串,指定了连接的细节。如果在Connection页选中了“Allow saving password”,则在该文件中也会记录用户的密码信息。

    二、ODBC连接方式 

    使用ODBC连接方式,首先要配置ODBC数据源。ODBC数据源配置成功后,就可以相应指定下面介绍的连接字符串进行数据库连接。

    1  ODBC的系统DSN连接方式

    ConnectionString="DSN=SysDSNName;UID=YourUid;PWD=YourPwd;Database=YourDB"

    其中,DSN为系统DSN的名称,其它参数与3.1中介绍的参数相同。

    2  ODBC的文件DSN连接方式

    ConnectionString="FileDSN=FileDSNName;UID=YourUid;PWD=YourPwd;Database=YourDB"

    其中,FileDSN为文件DSN的名称,其它参数与3.1中介绍的参数相同。

    用记事本打开相应的.dsn文件(一般位于C:Program FilesCommon FilesODBCData Sources目录下),可以看到,类似于数据链接文件,该文件中也指定了连接的细节。

    3  ODBC的无DSN连接方式

    ConnectionString="Driver={SQL Server};Server=YourServer;

    UID=YourUid;PWD=YourPwd;Database=YourDB")

    此方式不用配置ODBC数据源。其中,Driver为ODBC驱动程序名称,Server为数据库服务器名称,其它参数与3.1中介绍的参数相同。

    4  数据链接文件方式

    首先,采用3.2中的方法创建数据链接文件。但进行文件配置时,在Provider页中选择基于ODBC的提供者——Microsoft OLE DB Provider for ODBC Drivers。此方式的ConnectionString与3.2中介绍的相同。

    三、实例

    下面是采用OLE-DB的字符串方式,连接到SQL Server2000数据库的示例代码:

    ConnectionString="Provider=SQLOLEDB.1; Data Source=YourSrc;

    UID=YourUid; PWD=YourPwd; Database=YourDB";初始化连接字符串

    Set Conn=Server.CreateObject("ADODB.Connection")  ;创建Connection对象

    Conn.Open  ConnectionString                       ;调用Open方法,建立连接

    …                                                ;进行数据存取操作

    Conn.Close                                        ;关闭连接

    Set Conn=Nothing                                  ;释放Connection对象

    需要注意的是,应尽可能晚的建立连接,同时又尽可能早的关闭连接,这样保证连接打开的时间最短,可以充分发挥OLE-DB的连接缓冲池的作用,节省连接资源。

    文章2:http://bbs.51testing.com/viewthread.php?tid=87825&highlight=oracle

  • QTP参考资料收集(3)

    2009-03-31 16:07:12

    3、QTP读取Excel数据的方法

     

    在构建自己的测试框架时,或者是从Excel读入外部数据进行检查时都要用到Excel的COM对象编程方法,下面脚本中的ReadFile函数就实现了这样的功能,首先创建Excel应用程序对象,然后打开Excel文件,把Excel数据读取到一个数组中。
     
    arrRange = ReadFile("D:\QTP\MyWork\ReadExcelFileTest1\ObjectTree.xls","Tree")
    'Msgbox UBound (arrRange,1)
    'Msgbox UBound (arrRange,2)
    ' 读取其中一个单元格的数据
    Msgbox arrRange(3,1)
     
     
    ' 输入:
    '             sFileName: Excel文件
    '             sSheetName:表单名称
    ' 返回:
    '             包含Excel数据的数组
    Function ReadFile(sFileName,sSheetName)
           Dim oExcel
           Dim oSheet
           Dim oRange
           Dim arrRange
     
           On Error Resume Next
               ' 创建Excel应用程序对象
                  Set Excel = CreateObject("Excel.Application")
                  If err.Number <> 0 Then
                         MsgBox "未能初始化Excel" & vbCrLf & _
                                     "请确保Excel已安装", vbCritical
                         Exit Function
                  End If
           On Error Goto 0
                        
           On Error Resume Next
                         ' 打开Excel文件
                         oExcel.Workbooks.Open(sFileName)
                      If err.Number <> 0 Then
                                MsgBox "未能加载Excel文件" & vbCrLf & _
                                       "请确保Excel文件路径正确或格式正确", vbCritical
                                Exit Function
                         End If
           On Error Goto 0
          
           ' 获取表格的使用范围
           Set Sheet = oExcel.Worksheets(sSheetName).UsedRange
           ' 获取从A列到Z列,从第1行到第1000行的范围i中的所有值
           Set Range = oSheet.Range("A1:Z1000")
           '把Excel数据转换到数组
           arrRange = oRange.Value
           ' 关闭工作簿
           oExcel.WorkBooks.Item(1).Close
           ' 退出Excel
           oExcel.Quit
           Set Excel = Nothing
        ' 返回包含Excel数据的数组
         ReadFile = arrRange
    End Function

  • QTP参考资料收集(2)

    2009-03-31 16:03:03

    2、TD与QTP连接

    1 、安装 TD,检验 TD 是否安装成功,启动 TD Server 服务器后,在与 Server 相连的其他计算机上,打开 IE 浏览器,在地址栏输入 http://TD Server 的 ip 地址 /TDbin/start_a.htm 如果能够浏览到 TD 界面 , 说明安装成功。51Testing软件测试网 @*mY5a‑kuY x
    51Testing软件测试网 k| q L#SC?J.fM
    2、安装 QTP,验证 QTP 安装成功,进入 windows 操作系统,点击,开始 -> 程序 ->Quick Test Professional-> Quick Test Professional ,打开 QTP 使用界面,进行简单的录制,保证脚本录制成功,并且可以回放,与你的预操作达到的结果一致,证明 QTP 安装成功。
    ­sx*b"Kb)t0
    S#w7ivS03、安装插件,进入 TD 首页,点击见面上的 TD Add In,进入 TD Add In 界面点击 More TestDirector Add Ins 进入 More TestDirector Add Ins 界面,下载名为 TDplugInsSetup 的插件,大约 35 兆并且在 Server 与 QTP 客户机上安装这个插件,安装成功后,会要求你重启电脑,重启后会看到,开始-程序中有个新安装的程序 “Quick Test Professinal add in for Quality Center” ,登入 TD 进入 test plan 检测是否可以在 test plan 中添加 QTP 类型的测试用例,点击后 , 出现QUICKTEST.TEST , 并且可以建立 QTP 的测试用例。
    m$y d‑w1r'd7R0
    ‑v^1AO zd(g+W04、检查没有问题之后 , 还需要在安装 QTP 的机子上做一些相应的设定,进入 QTP 主界面 , 点击文件栏的 Tools-Options , 进入 Options 对话框 在 Run Tab 中选择 Allow other Mercury products to run test and components , 以及 Submit a defect to Qualiyt Center for each failed step 选中后 , 点击 ok 保存这个设置,在 QTP 主界面中点击 Tool - Quality Center Connection,在 Server 中输入 http:// TDServer ip 地址 /TDbin( 本例中使用 htt......) , 点击 connect 按钮 , QTP 连接到服务器上 , 如果服务器连接有问题 , 则会提示连接失败。
    5a?*`R6j,q0
    U"t,v3y"M05、在 project connection 中包含一下几项:
    h JN]"|0   Domain : TD 服务器站点管理中建立项目的域51Testing软件测试网fq S"F t-L G O.n
       Project :域中你所建立的项目
    cL ?_R­j Y(pk0   User :登陆项目所用的用户名51Testing软件测试网 n8Xd.B8JO^+\‑z5G
       Password :相应用户名使用的密码51Testing软件测试网G v5k?'@F N
       Reconnect on startup 在下次启动 QTP 时自动登陆到你的项目中 51Testing软件测试网+Jv[1]c%Zt NZ
       Save password for reconnection on startup 为下次登陆保存密码51Testing软件测试网 B}}y'[ L
    完成了上述操作就 TD 和 QTP 就连接起来 , 可以从 TD 调用 QTP 脚本了

     

  • QTP参考资料收集(1)

    2009-03-31 15:46:36

    QTP的Action间的信息共享的4种方法

    通过Action参数来传递数据

    Action2的脚本如下:

    ' Input Parameters
    Message = Parameter("Msg")
    Msgbox Message
    ' Output Parameters
    If NOT Message = "" Then
           Parameter("ReturnMsg") = "The Message is " & Message
    Else
           Parameter("ReturnMsg") = "The Message is Empty!"
    End If
     
    ' RetuenValue
    ExitAction "HAHAHAHHAHA!!!!!"
    'ExitAction Parameter("ReturnMsg")
     
     
    3种调用Action的方法,Action1的脚本如下:
    ' 调用Action2,输入参数为 “ Hello!”,把输出参数值写到ReturnMessage1变量
    RunAction "Action2", oneIteration,"Hello!" ,ReturnMessage1
    Msgbox ReturnMessage1
     
    ' 调用Action2,输入参数为 “ Hello!”,通过Parameter方法读取输出参数值
    RunAction "Action2", oneIteration,"Hello!"
    ReturnMessage2= Parameter("Action2","ReturnMsg")
    Msgbox ReturnMessage2
     
    ' 如果被调用的Action使用了ExitAction来退出Action并返回ReturnValue,则可以使用下面的方式来获取Return Value的值
    ' 注意OutPut Parameters与Return Value的区别
    ReturnMessage3 = RunAction( "Action2", oneIteration ,"Hello!")
    Msgbox ReturnMessage3
     
     通过全局数据表(Global Data Table)来共享数据
     
    在Action1中设置参数值,Action1的脚本如下:
    ' 获取全局数据表
    Set Sheet = DataTable.GetSheet("Global")
    ' 查找参数列
    Set Parameter1 = Sheet.GetParameter("Column1")
    Set Parameter2 = Sheet.GetParameter("Column2")
    ' 设置参数值
    Parameter1.Value="Hello"
    Parameter2.Value="World!"
    ' 调用Action2,Action2将使用前面设置的参数值
    RunAction "Action2", oneIteration
    在Action2中读取参数值,Action2的脚本如下:
    ' 获取全局数据表
    Set Sheet = DataTable.GetSheet("Global")
    ' 读取参数值
    Set Parameter1 = Sheet.GetParameter("Column1")
    Set Parameter2 = Sheet.GetParameter("Column2")
    ' 使用参数值
    Msgbox Parameter1 &" " & Parameter2

    QTP的Action间的信息共享的4种方

    通过Action参数来传递数据

    Action2的脚本如下:

    ' Input Parameters
    Message = Parameter("Msg")
    Msgbox Message
    ' Output Parameters
    If NOT Message = "" Then
           Parameter("ReturnMsg") = "The Message is " & Message
    Else
           Parameter("ReturnMsg") = "The Message is Empty!"
    End If
     
    ' RetuenValue
    ExitAction "HAHAHAHHAHA!!!!!"
    'ExitAction Parameter("ReturnMsg")
     
     
    3种调用Action的方法,Action1的脚本如下:
    ' 调用Action2,输入参数为 “ Hello!”,把输出参数值写到ReturnMessage1变量
    RunAction "Action2", oneIteration,"Hello!" ,ReturnMessage1
    Msgbox ReturnMessage1
     
    ' 调用Action2,输入参数为 “ Hello!”,通过Parameter方法读取输出参数值
    RunAction "Action2", oneIteration,"Hello!"
    ReturnMessage2= Parameter("Action2","ReturnMsg")
    Msgbox ReturnMessage2
     
    ' 如果被调用的Action使用了ExitAction来退出Action并返回ReturnValue,则可以使用下面的方式来获取Return Value的值
    ' 注意OutPut Parameters与Return Value的区别
    ReturnMessage3 = RunAction( "Action2", oneIteration ,"Hello!")
    Msgbox ReturnMessage3
     
     通过全局数据表(Global Data Table)来共享数据
     
    在Action1中设置参数值,Action1的脚本如下:
    ' 获取全局数据表
    Set Sheet = DataTable.GetSheet("Global")
    ' 查找参数列
    Set Parameter1 = Sheet.GetParameter("Column1")
    Set Parameter2 = Sheet.GetParameter("Column2")
    ' 设置参数值
    Parameter1.Value="Hello"
    Parameter2.Value="World!"
    ' 调用Action2,Action2将使用前面设置的参数值
    RunAction "Action2", oneIteration
    在Action2中读取参数值,Action2的脚本如下:
    ' 获取全局数据表
    Set Sheet = DataTable.GetSheet("Global")
    ' 读取参数值
    Set Parameter1 = Sheet.GetParameter("Column1")
    Set Parameter2 = Sheet.GetParameter("Column2")
    ' 使用参数值
    Msgbox Parameter1 &" " & Parameter2

  • (转)QTP将错误信息写到数据库中

    2009-03-30 11:45:05

    1、在SQL Server中新建数据库QTP,并新建表Q_Message,字段ID,自动增加,字段Message,varchar255

    2、在管理工具中新建ODBC的数据源

    3、将错误信息存储到数据库

    On   Error   Resume   Next

    Dim a,b,c
    a=0
    b=1
    c=b/a
    ErrorHandle()

    d

    ErrorHandle()

    Public Function ErrorHandle()
            If Err.Number <> 0 Then

            DB("Error Num: " & Err.Number & "; Error Src: " & Err.Source & "; Error Desc: " & Err.Descrīption)

      End If
    End Function

    Public  Function DB (sql)
     Dim cmd,aa
     aa="INSERT INTO Q_Message(Message) VALUES ('"&sql&"')"
     Set cmd=createobject("adodb.command")
     cmd.activeconnection="Driver={SQL Server};Server=TJMDCL-SUNQIANG;Uid=sa;Pwd=sa;DATABASE=QTP;"
     cmd.CommandType = 1
     cmd.CommandText = aa
     cmd.Execute()
     Set cmd.activeconnection=Nothing
     Set cmd=Nothing
    End Function

  • (转)在QTP中将数据库的数据导入到EXCEL

    2009-03-30 11:44:02

    昨天遇到这个问题.自己也有点迷茫,在51上发帖后得到高人指点,在这里我将代码写出来,留个足迹,呵呵,谢谢风过无痕.M,Eo7[0J H K13871151Testing软件测试网9I P-v x5~KB*{7j#L

    ------------------

    .mU!O+_(m4UJ1|138711

    |VX!g1uF138711Set excelObj = CreateObject("Excel.Applicaiton") '创建一个对象51Testing软件测试网}6Ag4yvU:`J? `

    51Testing软件测试网S6wu6A XRo:O

    xlsUrl = "C:\QTP\0110\sql-excel-qtp\data.xls"  '指定一个已经存在的XSL文件路径

    u1j4jZ+G G&yOW:|5K13871151Testing软件测试网+R2CCG'RM6[h

    excelObj.workbooks.open(xlsUrl)    '打开EXCEL

    |;^6d/zN4x"Q/A13871151Testing软件测试网N5e%Z7e*T7d"p9w

    Set sheetNew = excelObj.sheets.item(2)  '设置将数据放在EXCEL中的那一页上(索引从1开始)51Testing软件测试网-Q*P bj R5I{!|edz

    /^+dv+|$y138711'相关的数据库操作

    M@MQf5d9]13871151Testing软件测试网%T/]A o$Y

    Set conn = CreateObject("adodb.connection") set rs = createobject("adodb.recordset") conn.open "Provider=SQLOLEDB.1;Password=qaqc;Persist Security Info=True;User ID=test;Initial Catalog=test;Data Source=192.168.0.53" sql="select * from test" rs.open sql,conn

    &`"Ic~9h`X13871151Testing软件测试网.G+Mf Y9a)^4[

    Dim i while not rs.eof

    U+Mpr R138711

    ]2uhO Hd[138711    user_id = rs("user_id").value51Testing软件测试网!yq"d"[qc Gx

    51Testing软件测试网1v%CoZ;Do Q

        user_name = rs("user_name").value51Testing软件测试网TI:UU&f$] S

    +l.I7v%DA)G9`:|I138711    sheetNew.cells(i+1,1).value = user_id  '列付值51Testing软件测试网 i%k5n@&`)i*L

    N6]8H)l!Oi:n138711    sheetNew.cells(i+1,2).value = user_name  '列付值51Testing软件测试网4o _ F0Mlc4ya0r9k

    6N/cv\Re7j3V138711i = i + 1

    { J%A6q8c13871151Testing软件测试网 YM)t7sD{?x.d%p

        rs.movenext

    sx[q-}4`&k T4W.V138711

    Ws6eF[0d\Zl4R&CHx138711wend

    9m ~r0`vC Fy13871151Testing软件测试网 X.w1v}&a

    excelObj.activeworkbook.saveas "C:\QTP\0110\sql-excel-qtp\data.xls"  '保存数据51Testing软件测试网iy$y {5o,Dx4v H(|D

    ] oBNT138711excelObj.quit    '关闭对象

    !tuy"` ~5^138711

    6iW!Rns5D Y6k138711set excelObj = nothing  '清空对象

    .Ij1UQW1\6["?c13871151Testing软件测试网cMN:E4~5_ G)[

    rs.close    '关闭数据库连接操作51Testing软件测试网*he3|-lu:|T

    %IM9bT,@ _ w138711set rs=nothing

    4K2g6b"m1M8p,c5Z13871151Testing软件测试网K `$aa`8D,p+y

    conn.close51Testing软件测试网r)~_ `JF

    51Testing软件测试网E$MI1ZgC*e

    set conn = nothing

    b'A e2mJb\i138711

    8f(Q9Yse8r f;])X138711 

    @TCWm;uUa138711

    H.lD'm3j)@%~x8?138711------------这就是导出到EXCEL的全部过程:),后面如果要用到这些数据的话,直接导入进来就可以

  • (转)QTP访问数据库(推荐)

    2009-03-30 10:45:53

    一 、先给一个访问数据库的vbs脚本:

    使用的时候只需要调用下面标记为红色的三个函数基本就可以了

    '@Description获取检索到数据集
    '@Documentation<selectCommandText>查询语句
    Public Function FillDataTable(ByRef selectCommandText)
     Dim conn

     Set conn = getOleDbConnection()

     Dim cmd

     Set cmd = getOleDbCommandInstance()
     
     cmd.CommandText = selectCommandText
     cmd.Connection = conn
     Dim adapter
     Set adapter = getOleDbDataAdapterInstance()
     
     adapter.SelectCommand = cmd
     Dim data
     Set data = getDataTableInstance()

     adapter.Fill(data)

     conn.Close

     Set FillDataTable = data
    End Function

    '@Description执行一条无返回结果集的Sql语句
    '例如Update 、Insert、delete语句
    '@Documentation<selectCommandText>查询语句
    Public Function ExecuteNoQuery(ByRef selectCommandText)

     Dim conn

     Set conn = getOleDbConnection()

     Dim cmd

     Set cmd = getOleDbCommandInstance()
     
     cmd.CommandText = selectCommandText
     cmd.Connection = conn
     '返回影响的行数
     Dim resultCount
     resultCount =cmd.ExecuteNonQuery()

     conn.Close
     Set ExecuteNoQuery = resultCount
     
    End Function

    '@Description执行查询,并返回查询所返回的结果集中第一行的第一列。忽略额外的列或行
    '例如Select count(*) from student
    '@Documentation<selectCommandText>查询语句
    Public Function ExecuteScalar(ByRef selectCommandText)

     Dim conn

     Set conn = getOleDbConnection()

     Dim cmd

     Set cmd = getOleDbCommandInstance()
     
     cmd.CommandText = selectCommandText
     cmd.Connection = conn
     Dim resualtObject
     resualtObject = cmd.ExecuteScalar()

     conn.Close
     ExecuteScalar = resualtObject
     
    End Function

    '@Description获取OleDbConnection对象
    Private Function getOleDbConnection()

     Set conn = DotNetFactory.CreateInstance("System.Data.OleDb.OleDbConnection")
      conn.ConnectionString =Environment.Value("ConnectionString")'我的数据库连接字符串在环境变量里面保存,原型如下:
      'Provider=SQLOLEDB;server=127.0.0.1;database=Northwind;uid=sa;pwd=sa
      conn.Open()

     Set getOleDbConnection = conn
    End Function

    '------------------------------------------------------------------------------------------------------------

    '@Description获取OleDbCommand的对象实例
    Private Function  getOleDbCommandInstance()
     Dim cmd

     Set cmd = DotNetFactory.CreateInstance("System.Data.OleDb.OleDbCommand")
     Set getOleDbCommandInstance = cmd
    End Function

    '@Description获取OleDbDataAdapter的对象实例
    Private Function  getOleDbDataAdapterInstance()

     Dim adapter
     Set adapter = DotNetFactory.CreateInstance("System.Data.OleDb.OleDbDataAdapter")
     Set getOleDbDataAdapterInstance = adapter
     
    End Function

    '@Description获取DataTable的对象实例
    Private Function  getDataTableInstance()
     Dim data
     Set data = DotNetFactory.CreateInstance("System.Data.DataTable")
     Set getDataTableInstance = data
    End Function

    '@Description获取DataSet的对象实例
    Private Function  getDataSetInstance()
     Dim data
     Set data = DotNetFactory.CreateInstance("System.Data.DataSet")
     Set getDataTableInstance = data
    End Function

    我写的这个访问数据库的底层代码主要是用于访问SQLServer数据库和Access数据库,很容易扩展写成专门访问SQLServer数据库或者Oracle数据库的代码,如果搞不明白,可以直接发邮件给我!

    二 、再给一个如何调用上述代码的实例:

    以SQLServer自带的NorthWind数据库为例,直接在QTP的专家视图里面写的代码,如下:

    Dim rowcount

    '获取Products表的记录数,这个返回值不是一个对象,所以不能这样写:Set rowcount = ExecuteScalar("Select Count(*) From Products")
    rowcount = ExecuteScalar("Select Count(*) From Products")
    msgbox rowcount

    Dim dtdata
    '获取Products中的所有数据,放到dtdata对象中
    Set dtdata = FillDataTable("Select * from Products")

    rowcount = dtdata.Rows.Count
    Dim i
    For i = 0 to rowcount -1

    'dtdata.Rows.get_Item(i)("ProductName")   获取第i行字段名称为ProductName的内容,
    '也可以这样写dtdata.Rows.get_Item(i)(1) 即可以是字段名也可以字段编号
    Reporter.ReportEvent micPass,"第"&i&"条记录","ProductName:"&dtdata.Rows.get_Item(Cint(i))("ProductName")&",QuantityPerUnit:"&dtdata.Rows.get_Item(Cint(i))("QuantityPerUnit")
    Next

     

    下面一个截图是通过QTP提供的Add Watch的功能学习如何使用DataTable中更多的属性和方法!很有用的哦!!

    如果发现有什么问题,欢迎指正,共同进步!!!

    调试DataTable对象抓图,很有帮助的哦!
     

    调试DataTable对象抓图,很有帮助的哦!

  • (转)QTP通过.NET组件访问多种数据库的方法

    2009-03-30 10:43:32

    在编辑QTP脚本中经常需要访问数据库或者Excel,针对数据库或者文件的访问,大家最常用的应该是使用ADO的一系列对象,例如获取数据库连接对象:Set connObj = CreateObject("ADODB.Connection");获取记录集获取对象:Set rdsObj = CreateObject("ADODB.Recordset"),获取Excel文件访问对象:Set excelObj = CreateObject("Excel.Application")等等。不知道大家使用过程中有何感受,我感觉最不爽的地方就是读取记录集中的数据,必须要和数据库保持连接状态,并且还要使用循环来读取数据,不能一下子定位到我想要的数据(可能是自己还不太会用吧,抱歉O(∩_∩)O哈哈~)。曾经用C#写过几年的程序,感觉使用ADO.NET的系列对象来访问数据库、操作数据是相当的方便,所以一想到访问数据库和XML格式的数据就想到ADO.NET的数据库访问对象,DataSet、DataTable对数据的访问还是比较方便。最令人兴奋的是QTP可以通过创建数据库访问对象的方式使用ADO.NET,并且操作的方式和流程与在C#下编程思路没有多大区别。废话少说,言归正传。

    首先教给大家一个小知识,如何获取各种数据库连接字符串:

    新建一个文本文件,把它的扩展名修改成udl,名字可以任意起,如:db.udl,双击该文件按照操作提示即可获取,赶快试一下吧,很不错的。

    OK,开始我们的旅行吧!

     

      首先先附上一个通过.NET从SqlServer数据库读取数据的C#源代码(如果需要访问Access数据库,可以将访问对象修改成System.Data.OleDb下的相关对象,如果需要访问foxpro数据库,可以将访问对象修改成System.Data.Odbc下的相关对象,并且是通用的,Odbc基本可以访问大部分关系型数据库)

     public System.Data.DataTable GetAccessData(string selectCmdText)
     {

          string str = "server=.;database=StudentDB;uid=sa;pwd=sa";
          System.Data.SqlClient.SqlConnection conn = new SqlConnection();
          conn.ConnectionString = str;
          conn.Open();
          System.Data.SqlClient.SqlCommand cmd =new System.Data.SqlClient.SqlCommand();
          cmd.CommandText = selectCmdText;
          cmd.Connection = conn;
          System.Data.SqlClient.SqlDataAdapter adapter=new System.Data.SqlClient.SqlDataAdapter();
          adapter.SelectCommand = cmd;
          System.Data.DataTable dtdata = new DataTable();
          adapter.Fill(dtdata);
          conn.Close();
          return dtdata;
      }

    以上代码对应到QTP的vb脚本中如下所示:

    Dim conn
    Set conn = DotNetFactory.CreateInstance("System.Data.SqlClient.SqlConnection")
    conn.ConnectionString = "server=.;database=StudentDB;uid=sa;pwd=sa"
    conn.Open()

    Dim cmd

    Set cmd = DotNetFactory.CreateInstance("System.Data.SqlClient.SqlCommand")

    cmd.CommandText="select * from student"
    cmd.Connection = conn
    Dim adapter
    Set adapter = DotNetFactory.CreateInstance("System.Data.SqlClient.SqlDataAdapter")

    adapter.SelectCommand = cmd
    Dim dtdata

    Set dtdata= DotNetFactory.CreateInstance("System.Data.DataTable")
    dtdata.TableName="qtptest"
    adapter.Fill(dtdata)
    conn.Close

    msgbox dtdata.Rows.Count  '显示获取的数据条数

    今天事情真多,先写到这里吧,下次把通过DataSet对象对xml数据的操作给大家贡献出来,相信你会放弃使用通过ADO的对象访问xml数据的,只是个人见解,多提宝贵意见!!

  • (转)QTP中DataTable操作大全

    2009-03-30 10:40:36

     序曲

       假设现在有一个Excel文件:D:\data.xls,里面的具体内容如下:有两个Sheet,第一个叫Login,第二个叫InsertOrder;

       当前QTP的Test中有两个Action:LoginAction和InsertAction。当然该Test中对应的DataTable应该有三个:Global、LoginAction和InsertAction;

    下面就详细的说一下DataTable是如何操作这些数据的:

    正文

    DataTable.Import "D:\data.xls" '将data.xls中第一个叫Login表单内容导入到Test的Global表单中,将InsertOrder表单的内容导入到Test的LoginAction表单中,依次类推;感觉怪怪的,所以这个方法比较适合只导入Excel中第一个表单的内容

    DataTable.ImportSheet "D:\data.xls","Login","LoginAction"'将data.xls文件中的Login表单内容导入到当前Test的LoginAction表单中

    DataTable.GetSheet("Global").SetNextRow'设置下一行,红色表示要操作的表单名字
    columnCount = DataTable.GetSheet("Global").GetParametercount'取得Global表单中的总列数
    DataTable.GetSheet("Global").DeleteParameter ("列名")'运行时向Global表单中删除列

    DataTable.GetSheet("Global").SetPrevRow'设置上一行
    cellValue = DataTable.GetSheet("Global").GetParameter("列名")'取得Global表单中某列的值,可以这样写:DataTable.Value("列名","表单名字"),我喜欢这种写法

    rowCount = DataTable.GetSheet("Global").GetRowCount'取得Global表单中的总行数
    DataTable.GetSheet("Global").SetCurrentRow(3)'设置当前行为第3行
    DataTable.Value ("列名", "表单名字")="twf"'运行时设置某列值,例如DataTable.Value ("username", "LoginAction")="twf"

    DataTable.Export "D:\result.xls"'将当前Test的所有表单(LoginAction和InsertOrderAction、Global)中的所有内容全部导出到result.xls中

    DataTable.ExportSheet "D:\result.xls","LoginAction"'将当前Test的LoginAction表单中的内容导出到D:\result.xls文件中

    有问题多多指教,共同进步!您的关注会使俺快乐!!!

  • (转)我的QTP的学习方法及总结(3)

    2009-03-29 13:49:49

    写脚本的时候,当系统发生页面跳转或是当前操作有返回结果需要等待的时候,需要对是否到达预期页面或预期结果是否返现进行验证,否则很容易出现脚本运行失败的情况。

    @4imHVJ|u138711

    以下是几种常用check方法。51Testing软件测试网2LD8R U r t

     51Testing软件测试网+AE[ Ak8q

    1.      QTP自带Sync方法51Testing软件测试网;U!o9KhN

    SystemUtil.Run "iexplore.exe", "http://www.google.com"51Testing软件测试网1g,^]3y5[.E:Q/f R xXl

    Browser("Google").Page("Google").Sync

    R1^_9T1im(V138711

    与这种方式有关的设置如图。

    m3a%i,n K*p1q*Z9eGq138711

    :]Bn_6f138711

    D+\/m%XsI(t9g-C"Od138711

     51Testing软件测试网%N(Da#y%t/`f;m W!`

    2.      WaitProperty方法51Testing软件测试网%@"IG;m K

    这个也是支持的一种方法,等待指定对象属性获得指定值或超出指定超时后再继续下一步。原型object.WaitProperty(PropertyName,PropertyValue, [lTimeOut])帮助文档对各个参数有详细说明。TimeOut如果不指定也会使用上图中的设置。

    rZ$Gqsi7}138711

    If Browser("百度一下,你就知道").Page("百度一下,你就知道").WaitProperty("title","百度一下,你就知道",1000) Then

    m"w"Oksg#YF138711

       '后续操作51Testing软件测试网.hr%k:||PYd!k _

    End If51Testing软件测试网D}P cw:JtN

     51Testing软件测试网gCw+ty@#M

    3.      利用DomRegExp检索51Testing软件测试网ywd3h.R D:[ B

    这种方法利用DomcreateTextRange方法获得页面文本,再结合正则表达式进行检索,判断页面是否有预期的结果。

    +A"Dn-p5O&N138711

    set a=Browser("百度一下,你就知道").Page("百度一下,你就知道").Object.body.createTextRange()51Testing软件测试网P1p0zK&A"q\2oiZ

    c=Check (a,"")51Testing软件测试网^m8@p y/x

    msgbox c

    A8xjdd138711

     51Testing软件测试网Zd~ L0q^!Q+YC

    '检索函数

    8x"?)Szq?138711

    'Obj 检索的对象51Testing软件测试网%jr?v|Q9^

    'checkStr 检索的字符串51Testing软件测试网 l9D;n*F"x@vF

    Public Function Check(ByRef Obj, ByRef checkStr)51Testing软件测试网p7mcFj7Rj

                b=Obj.text51Testing软件测试网px2P7XT1F5[\

                Set regEx=new RegExp51Testing软件测试网6|nx3D2JMe"~;h

                regEx.Pattern=checkStr  '设置需要查找的字符串

    pi3r#@E~a? ~138711

                regEx.IgnoreCase=true

    9W1eT;F S138711

                regEx.Global=true51Testing软件测试网z,p3R2z2IOT0e q+c

                Check = regEx.Test(b)   '在页面的文本中检索预期值,返回布尔值

    &i0@{BZ)msw138711

    End Function51Testing软件测试网 T6k5x"_F _$X_7L

    正则表达式可以参考QTP安装目录help下的VBScript56.CHM文档。

    $Q/| x;M3V138711

     

    &_d c;m/x4MH y2P138711

    4.      利用Dom本身的查找

    5kb0QP N JO4F138711

    DomcreateTextRange也提供了查找的相应方法。如下代码。51Testing软件测试网w6w/~?Lj6e'I

    set a=Browser("网易电子邮箱-极速3.0正式版").Page("网易电子邮箱-极速3.0正式版").Frame("index").Object.body.createTextRange

    2Z/D:GE*R138711

    msgbox Check (a,"草稿箱")

    )~An/o d R!f138711

     

    G;Rh,K3bw138711

    Public Function Check(ByRef Obj, ByRef checkStr)

    j9QK {ZT0l y{"^138711

    found = Obj.findText(checkStr)51Testing软件测试网`k,f \*Lavv

    Obj.select

    cO6YX.`-L t138711

    Check=found

    PWz;e{n138711

    End Function

    "Xx7D ]v$i138711

    以上代码是登陆163邮箱后检索页面是否有“草稿箱”文本并选中文本。51Testing软件测试网BFF}{J0D

     

    :e ^9E*ksSy5s138711

    5.      利用readyState判断页面当前所处状态51Testing软件测试网 d;|qxJE&mF

    利用页面的readyState属性判断当前页面所处状态。

    a^f Lv138711

    SystemUtil.Run "iexplore.exe", "http://www.sina.com.cn/"

    tb!|;x$TfQC138711

    msgbox Browser("新浪首页").Page("新浪首页").Object.readyState51Testing软件测试网:_K_0_.JKn3}3T

    51Testing软件测试网1j"V-y,w"x @1v

    I m i*C#l,k4H4z:Yk.|7x138711

    上图是打开sina首页,正在打开的状态及QTP输出的readySta值。如果首页已完全打开返回的值应为Complete51Testing软件测试网5^"v-E^-K

    可以通过readyState返回的状态值,判断进行后续操作。readyState的可能值如下(中英):51Testing软件测试网 q[O X7`.D

    There are five possible values for readyState:51Testing软件测试网n/z*UW^q

    0 (Uninitialized): The object has been created but the open() method hasn’t been called.

    ic:B9R%rsuD138711

    1 (Loading): The open() method has been called but the request hasn’t been sent.51Testing软件测试网+u v"R3Y!^n

    2 (Loaded): The request has been sent.51Testing软件测试网:AZ x#YB5?3? M_!h

    3 (Interactive). A partial response has been received.51Testing软件测试网T.{h@AC|*`

    4 (Complete): All data has been received and the connection has been closed.

    O?j'by138711

     51Testing软件测试网e+dx'c6SRS3O

    readyState有五种可能的值:51Testing软件测试网Lm{mn[iG'|

    0 (未初始化)(xml(标准化越来越近了)HttpRequest)对象已经创建,但还没有调用open()方法。

    "~b9c{ P9|0b138711

    1 (载入):已经调用open()方法,但尚未发送请求。

    &]@?6]&GU+f4]138711

    2 (载入完成)请求已经发送完成。51Testing软件测试网 tm:Tka

    3 (交互):可以接收到部分响应数据。51Testing软件测试网._L(o Ya)k \#L

    4 (完成):已经接收到了全部数据,并且连接已经关闭。

    -fy;Bn#}N'i138711

     

    a*ET [u1aj&j138711

    6.      利用QTP自带的检查点

    F/CTgUWe,gI^z\138711

    这种方式就是在脚本中插入Checkpoint进行相应检查,包括文本、图片、对象属性等,在录制过程或是录制完毕选择Insert—Checkpoint按提示操作即可,QTP会自动生成代码。由于QTP可以自动生成代码,在此不再贴出示例。

1393/7<1234567>
Open Toolbar