51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 1500|回复: 2
打印 上一主题 下一主题

QTP自动化测试之VBScript对象

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2018-3-6 16:24:49 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
VBScript作为脚本语言不仅能够编写简单的脚本,而且还能够创建及使用对象编写复杂的脚本,如
Class对象,数据字典,操作文件夹及文件,错误处理,正则表达式等等。

1. Class对象
2. Dictionary对象
3. FileSystemObject对象
4. Err对象
5. RegExp对象
1. Class对象
使用Class语句可以创建一个对象,可以为它编写字段、属性及方法,它只有两个对象事件——Initiali
ze与Terminate。首先来看一个简单的Class示例:
  1. Class User
  2.     '私有字段,也可以使用Public语句定义公有字段
  3.     Private m_UserName
  4.     Private m_Profile

  5.     'Initialize事件相当于构造函数
  6.     Private Sub Class_Initialize
  7.         m_UserName = Empty   '设置UserName初始值为空字符串
  8.     End Sub

  9.     'Terminate事件相当于析构函数
  10.     Private Sub Class_Terminate
  11.         Set m_Profile = Nothing   '将对象设置为Nothing,销毁对象
  12.     End Sub

  13.     'Property Get语句,获取属性值或对象引用,Default只与Public一起使用,表示该属性为类的默认属性
  14.     Public Default Property Get UserName
  15.         UserName = m_UserName
  16.     End Property
  17.     'Property Let语句,设置属性值
  18.     Public Property Let UserName(newUserName)
  19.         m_UserName = newUserName
  20.     End Property

  21.     Public Property Get Profile
  22.         Set Profile = m_Profile
  23.     End Property
  24.     'Property Set语句,设置属性对象引用
  25.     Public Property Set Profile(newProfile)
  26.         Set m_Profile = newProfile
  27.     End Property

  28.     'ToString方法
  29.     Public Function ToString()
  30.         ToString = "Hello! " & Me.UserName   'Me相当于C#中的this关键字
  31.     End Function
  32. End Class
复制代码
用VBScript创建的对象并不是真正的面向对象,它不能继承和实现多态,但是在QTP对象模型Utility中,
提供了一个RegisterUserFunc方法可以覆写对象的方法,但这也不是真正意义上的面向对象。Class及其
成员如何创建,上面已经简单介绍过,若要对其中的一些语句进一步了解,还需要去仔细阅读一些参考
文档。下面我们来看看如何调用对象,在《VBScript基础上》变量赋值中也已经提到过。
  1. Dim u                  '定义对象变量名,注意变量名不能与类名相同,即使是大小写不同
  2. Set u = New User       '创建对象用New语句
  3. u.UserName = "known"   '给属性赋值
  4. MsgBox u.ToString()    '调用方法
复制代码
2. Dictionary对象
Dictionary是存储数据键和项目对的对象,其主要属性有Count、Item、Key,主要方法有Add、
Exists、Items、Keys、Remove、RemoveAll。下面是该对象的一个综合示例:
  1. '定义并创建Dictionary对象,使用CreateObject创建并返回自动化对象的引用
  2. Dim d
  3. Set d = CreateObject("Scripting.Dictionary")

  4. '向Dictionary对象中添加键值对
  5. d.Add "a", "Known"    'Add方法第一个参数是Key值,第二个是Item值
  6. d.Add "b", "Christina"
  7. d.Add "c", "test"
  8. d.Add "d", "fuck"
  9. Call ShowDictionary(d)

  10. '遍历Dictionary对象,更改Item值
  11. For i = 0 To d.Count - 1     'Count返回Dictionary对象中的项目数
  12.     If d.Exists("c") Then    'Exists判断Dictionary对象中是否存在指定关键字
  13.         d.Item("c") = "Test" 'Item返回Dictionary对象中指定Key的Item值
  14.     End If
  15. Next
  16. d.Remove("d")  'Remove从Dictionary对象中删除一个关键字,项目对。
  17. Call ShowDictionary(d)

  18. '输出Dictionary对象所有键值
  19. Sub ShowDictionary(dic)
  20.     Dim str, a
  21.     a = dic.Items  'Items返回一个包含所有Item值的数组
  22.     For i = 0 To dic.Count - 1
  23.         str = str & a(i) & vbCrlf
  24.     Next
  25.     MsgBox(str)
  26. End Sub
复制代码
3. FileSystemObject对象
FileSystemObject对象可以操作驱动器、文件夹及文件,其对象模型包含下面的对象和集合。

对象/集合        描述
FileSystemObject        主对象。包含用来创建、删除和获得有关信息,以及通常用来操作驱动器、文
件夹和文件的方法和属性。和该对象相关联的许多方法,与其他 FSO 对象中的方法完全相似;它们
是为了方便才被提供的。
Drive        对象。包含用来收集信息的方法和属性,这些信息是关于连接在系统上的驱动器的,如驱
动器的共享名和它有多少可用空间。请注意,"drive" 并非必须是硬盘,也可以是 CD-ROM 驱动器,
RAM 磁盘等等。并非必须把驱动器实物地连接到系统上;它也可以通过网络在逻辑上被连接起来。
Drives        集合。提供驱动器的列表,这些驱动器实物地或在逻辑上与系统相连接。Drives 集合包
括所有驱动器,与类型无关。要可移动的媒体驱动器在该集合中显现,不必把媒体插入到驱动器中。
File        对象。包含用来创建、删除或移动文件的方法和属性。也用来向系统询问文件名、路径和多种
其他属性。
Files        集合。提供包含在文件夹内的所有文件的列表。
Folder        对象。包含用来创建、删除或移动文件夹的方法和属性。也用来向系统询问文件夹名、路
径和多种其他属性。
Folders        集合。提供在 Folder 内的所有文件夹的列表。
TextStream        对象。用来读写文本文件。
FileSystemObject对象所有属性、方法及对象和集合的详细说明,您可以查阅参考文档,因为内容比
较多,我们就看一个简单的示例,直观地来了解一下该对象的使用,该示例是将一个文件复制到指
定文件夹下。
  1. '定义并创建对象
  2. Dim fso, filePath, folderPath
  3. Set fso = CreateObject("Scripting.FileSystemObject")
  4. filePath = "C:\\Test.txt"
  5. folderPath = "D:\\Test"
  6. Call MoveFile(filePath, folderPath)

  7. '将文件移动到指定文件夹
  8. Sub MoveFile(sourceFile, targetFolder)
  9.     Dim file, fileName
  10.     '获取文件对象
  11.     Set file = fso.GetFile(sourceFile)
  12.     '判断目标文件夹是否存在
  13.     If Not fso.FolderExists(targetFolder) Then
  14.         fso.CreateFolder(targetFolder)
  15.     End If
  16.     '将文件移动到目标位置
  17.     file.Move(targetFolder & "\\" & file.Name)
  18. End Sub
复制代码
4. Err对象
Err对象是一个具有全局范围的内部对象,不必在代码中创建它的实例,含有关于运行时错误的信息。
主要属性有Description、HelpContext、HelpFile、Number、Source,主要方法有Clear、Raise,其属
性及方法的详细说明详见参考文档。下面的示例说明了Err对象的用法:
  1. '示例1:
  2. On Error Resume Next
  3. Err.Raise 6  '产生溢出错误
  4. MsgBox("Error #" & CStr(Err.Number) & " " & Err.Description)
  5. Err.Clear

  6. '示例2:
  7. '定义数据库连接
  8. Dim conn
  9. Set conn = CreateObject("ADODB.Connection")
  10. conn.BeginTrans  '开始事务

  11. ...

  12. '提交数据库事务错误处理
  13. On Error Resume Next
  14. If conn.Errors.Count > 0 Then
  15.     conn.RollbackTrans  '回滚事务
  16. Else
  17.     conn.CommitTrans    '提交事务
  18. End If
  19. Err.Clear
复制代码
5. RegExp对象
RegExp是正则表达式对象,提供简单的正则表达式支持功能。主要属性有Global、IgnoreCase、
Pattern,主要方法有Execute、Replace、Test,其属性及方法的详细说明详见参考文档。下面的
示例说明了RegExp对象的用法:
  1. Function RegExpTest(patrn, strng)
  2.     Dim regEx, match, matches            '建立变量。
  3.     Set regEx = New RegExp               '建立正则表达式。
  4.     regEx.Pattern = patrn                '设置模式。
  5.     regEx.IgnoreCase = True              '设置是否区分字符大小写。
  6.     regEx.Global = True                  '设置全局可用性。
  7.     Set matches = regEx.Execute(strng)   '执行搜索。
  8.     For Each match in matches            '遍历匹配集合。
  9.         retStr = retStr & "Match found at position "
  10.         retStr = retStr & match.FirstIndex & ". Match Value is '"
  11.         retStr = retStr & match.Value & "'." & vbCRLF
  12.     Next
  13.     RegExpTest = retStr
  14. End Function

  15. MsgBox(RegExpTest("is.", "IS1 is2 IS3 is4"))
复制代码


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

本版积分规则

关闭

站长推荐上一条 /1 下一条

小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

GMT+8, 2024-11-27 10:49 , Processed in 0.064105 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2024 Comsenz Inc.

快速回复 返回顶部 返回列表