VBS自动化编程

UFT采用VBScript作为脚本开发语言,能够设计强大、灵活的自动化测试脚本。熟练掌握VBScript语言是做好UFT自动测试的关键。使用UFT实施本次OA系统自动化测试前,先介绍下UFT编程时常用的VBScript语法,更多知识读者可参考微软官方文档。

VBScript简介

VBScript是微软开发的一种脚本语言,全称Microsoft Visual Basic Script Editon.(微软公司可视化BASIC脚本版),VBScript是Visual Basic的的一个抽象子集,用它编写的脚本代码不能编译成二进制文件,直接由Windows系统执行(实际是一个叫做宿主HOST的解释源代码并执行),高效、易学,大部分高级语言能干的事情,它基本上都具备,它可以使各种各样的任务自动化,可以使你从重复琐碎的工作中解脱出来,极大的提高工作效率。

目前很多自动化测试工具为用户提供的测试脚本编程语言都是所谓的“厂商语言”,即对某种编程语言的有限实现,或经过改造的编程语言的子集,这些语言会有很多方面的限制。而UFT基本完全使用了VBScript。编写一个自动化测试脚本基本由VBScript支持的函数库和UFT自带对象和函数库组成。因此,想写出好的脚本,必须熟悉VBScript和UFT相关的函数库。

VBScript基础

本节介绍的VBScript编程全部以案例介绍,不对具体语言做深入解析。常量定义

Const MyVar = 123 ' 常数默认为公共变量。

Private Const MyString = "erbao" ' 定义私有常数。

Const MyStr = "hello,uft", MyNumber = 1 '在一行上定义多个常数。变量定义

声明变量的一种方式是使用Dim、Public语句和Private语句在脚本中显式声明变量。例如:

Dim username

声明多个变量时,使用逗号分隔变量。例如:

Dim Top, Bottom, Left, Right

另一种方式是直接在脚本中使用变量名,隐式声明,但这不是一个好的编程习惯,这样有时会由于变量名被拼错而导致在运行脚本时出现意外的结果,如“ExceptValue”误写成“ExpectValue”。因此,最好使用Option Explicit语句显式声明所有变量,如果变量未定义就使用,则会提示“变量未定义”错误,每次编写脚本时在第一行加入“Option Explicit”。

Option Explicit

Dim username,password

创建如下形式的表达式给变量赋值:变量在表达式左边,要赋的值在表达式右边。例如:

B = 200数组变量定义

数组变量声明:

Dim A(10)

“10”表示定了包含10个元素的数组,但每个元素的下标从0开始,即A(10)数组包括A(0)、A(1)、 A(2)、 A(3)、 A(4)、 A(5)、 A(6)、 A(7)、 A(8)、 A(9)共计10个元素。

数组变量赋值:

在数组中使用索引为数组的每个元素赋值,从0到9,如果写A(10)则会超过数组边界。如下所示:

A(0) = 12

A(1) = 324

A(2) = 100

. . .

A(9) = 55数据类型

VBScript只有一种数据类型,称为Variant。Variant是一种特殊的数据类型,根据使用的方式,可以包含不同类别的信息。因为Variant是VBScript中唯一的数据类型,所以它也是VBScript中所有函数的返回值数据类型。

最简单的Variant可以包含数字或字符串信息。Variant用于数字上下文中时作为数字处理,用于字符串上下文中时作为字符串处理。这就是说,如果使用看起来象是数字的数据,则VBScript会假定其为数字并以适用于数字的方式处理。与此类似,如果使用的数据只可能是字符串,则VBScript将按字符串处理,也可以将数字包含在引号 (" ") 中使其成为字符串。

除简单数字或字符串以外,Variant可以进一步区分数值信息的特定含义。例如使用数值信息表示日期或时间。此类数据在与其他日期或时间数据一起使用时,结果也总是表示为日期或时间。从Boolean值到浮点数,数值信息是多种多样的。Variant包含的数值信息类型称为子类型。大多数情况下,可将所需的数据放进Variant中,而Variant也会按照最适用于其包含的数据的方式进行操作。

下表显示Variant包含的数据子类型:

表7- 1 VBScript数据类型

子类型

描述

Empty

未初始化的Variant。对于数值变量,值为0;对于字符串变量,值为零长度字符串 ("")。

Null

不包含任何有效数据的Variant。

Boolean

包含True或False。

Byte

包含 0 到 255 之间的整数。

Integer

包含 -32,768 到 32,767 之间的整数。

Currency

-922,337,203,685,477.5808 到 922,337,203,685,477.5807。

Long

包含 -2,147,483,648 到 2,147,483,647 之间的整数。

Single

包含单精度浮点数,负数范围从 -3.402823E38 到 -1.401298E-45,正数范围从 1.401298E-45 到 3.402823E38。

Double

包含双精度浮点数,负数范围从 -1.79769313486232E308 到 -4.94065645841247E-324,正数范围从 4.94065645841247E-324 到 1.79769313486232E308。

Date (Time)

包含表示日期的数字,日期范围从公元 100 年 1 月 1 日到公元 9999 年 12 月 31 日。

String

包含变长字符串,最大长度可为 20 亿个字符。

Object

包含对象。

Error

包含错误号。

可以使用转换函数来转换数据的子类型。另外,可使用VarType函数返回数据的Variant子类型。VBScript运算符

VBScrit也同样存在各种运算符:算数运算符、比较运算符、连接运算符和逻辑运算符。这里仅列出常用的运算符。算数运算符

表7- 2 VBScript算数运算符

描述

符号

负号

-

*

/

+

-

字符串连接

&比较运算符

表7- 3 VBScript比较运算符

描述

符号

等于

=

不等于

<>

小于

<

大于

>

小于等于

<=

大于等于

>=

对象引用比较

Is逻辑运算符

表7- 4 VBScript逻辑运算符

描述

符号

逻辑非

Not

逻辑与

And

逻辑或

Or运算符优先级

在一个表达式中进行多个运算时,每一部分都会按预先确定的顺序进行计算求解,这个顺序被称为运算符优先级。括号可改变优先级的顺序,强制优先处理表达式的某部分。括号内的操作总是比括号外的操作先被执行。但是在括号内,仍保持正常的运算符优先级。

当表达式有多种运算符时,先处理算术运算符,接着处理比较运算符,然后再处理逻辑运算符。所有比较运算符有相同的优先级,即按它们出现的顺序从左到右进行处理。算术运算符和逻辑运算符按下列优先级进行处理:

表7- 5 VBScript运算符优先级

算术

比较

逻辑

指数运算 (^)

相等 (=)

Not

负数 (-)

不等 (<>)

And

乘法和除法 (*, /)

小于 (

Or

整除 (\)

大于 (>)

Xor

求余运算 (Mod)

小于或等于 (<=)

Eqv

加法和减法 (+, -)

大于或等于 (>=)

Imp

字符串连接 (&)

Is

&

当乘法和除法同时出现在表达式中时,按照从左到右出现的顺序处理每个运算符。同样,当加法和减法同时出现在表达式中时,也按照从左到右出现的顺序处理每个运算符。

字符串连接运算符(&)不是算术运算符,但是就其优先级而言,它在所有算术运算符之后,而在所有比较运算符之前。Is运算符是对象引用的比较运算符,它并不比较对象或对象的值,而只判断两个对象引用是否引用了相同的对象。

数据类型转换ASC函数

Dim MyNumber

MyNumber = Asc("A") '返回 65。

MyNumber = Asc("a") '返回 97。

MyNumber = Asc("Apple") '返回 65。Chr函数

Dim MyChar

MyChar = Chr(65) '返回 A。

MyChar = Chr(97) '返回 a。

MyChar = Chr(62) '返回 >。

MyChar = Chr(37) '返回 %。CBool函数

Dim A, B, Check

A = 5: B = 5 ' 初始化变量。

Check = CBool(A = B) ' 复选框设为 True 。

A = 0 ' 定义变量。

Check = CBool(A) ' 复选框设为 False 。CInt函数

Dim MyDouble, MyInt

MyDouble = 2345.5678 ' MyDouble 是 Double。

MyInt = CInt(MyDouble) ' MyInt 包含 2346。

输入输出函数Msgbox输出函数

Dim MyVar

MyVar = MsgBox ("Hello World!", 65, "MsgBox Example")

' MyVar 包含 1 或 2,这取决于单击的是哪个按钮。InputBox输入函数

Dim Input

Input = InputBox("输入名字")

MsgBox ("输入:" & Input)

类型判断函数IsNull函数

Dim MyVar, MyCheck

MyCheck = IsNull(MyVar) ' 返回 False。

MyVar = Null ' 赋为 Null。

MyCheck = IsNull(MyVar) ' 返回 True。

MyVar = Empty ' 赋为 Empty。

MyCheck = IsNull(MyVar) ' 返回 False。IsDate函数

Dim MyDate, YourDate, NoDate, MyCheck

MyDate = "October 19, 1962": YourDate = #10/19/62#: NoDate = "Hello"

MyCheck = IsDate(MyDate) ' 返回 True。

MyCheck = IsDate(YourDate) ' 返回 True。

MyCheck = IsDate(NoDate) ' 返回 False。IsNumeric函数

Dim MyVar, MyCheck

MyVar = 53 '赋值。

MyCheck = IsNumeric(MyVar) ' 返回 True。

MyVar = "459.95" ' 赋值。

MyCheck = IsNumeric(MyVar) ' 返回True。

MyVar = "45 Help" ' 赋值。

MyCheck = IsNumeric(MyVar) ' 返回 False。IsArray函数

Dim MyVariable

Dim MyArray(3)

MyArray(0) = "Sunday"

MyArray(1) = "Monday"

MyArray(2) = "Tuesday"

MyVariable = IsArray(MyArray) ' MyVariable 包含 "True"。IsEmpty函数

Dim MyVar, MyCheck

MyCheck = IsEmpty(MyVar) ' 返回 True。

MyVar = Null ' 赋为 Null。

MyCheck = IsEmpty(MyVar) ' 返回 False。

MyVar = Empty ' 赋为 Empty。

MyCheck = IsEmpty(MyVar) ' 返回 True。

字符串处理函数Len函数

Dim MyString

MyString = Len("VBSCRIPT") 'MyString 包含 8。LTrim函数

Dim MyVar

MyVar = LTrim(" vbscript ") 'MyVar 包含 "vbscript "。

MyVar = RTrim(" vbscript ") 'MyVar 包含 " vbscript"。

MyVar = Trim(" vbscript ") 'MyVar 包含 "vbscript"。Rtrim函数

Dim MyVar

MyVar = LTrim(" vbscript ") 'MyVar 包含 "vbscript "。

MyVar = RTrim(" vbscript ") 'MyVar 包含 " vbscript"。

MyVar = Trim(" vbscript ") 'MyVar 包含 "vbscript"。Trim函数

Dim MyVar

MyVar = LTrim(" vbscript ") 'MyVar 包含 "vbscript "。

MyVar = RTrim(" vbscript ") 'MyVar 包含 " vbscript"。

MyVar = Trim(" vbscript ") 'MyVar 包含 "vbscript"。Split函数

test=Split(userinfo,”,”) ‘userinfo中包含“username,password”,则test(0)=“username”,test(1)=“password”

时间处理函数Date函数

Dim MyDate

MyDate = Date ' MyDate 包含当前系统日期。Day函数

Dim MyDay

MyDay = Day("October 19, 1962") 'MyDay 包含 19。Month函数

Dim MyVar

MyVar = Month(Now) ' MyVar 包含与当前月对应的数字。Year函数

Dim MyDate, MyYear

MyDate = #October 19, 1962#

MyYear = Year(MyDate) ' MyYear 包含 1962。Hour函数

Dim MyTime, MyHour

MyTime = Now

MyHour = Hour(MyTime)Minute函数

Dim MyVar

MyVar = Minute(Now)Second函数

Dim MySec

MySec = Second(Now)Now函数

MyVar = Now ' MyVar 包含当前的日期和时间。Time函数

Dim MyTime

MyTime = Time ' 返回当前系统时间。

语句逻辑结构If …then

Sub FixDate()

Dim myDate

myDate = #2/13/95#

If myDate < Now Then myDate = Now

End SubIf…then…elseif …

Sub ReportValue(value)

If value = 0 Then

MsgBox value

ElseIf value = 1 Then

MsgBox value

ElseIf value = 2 then

Msgbox value

Else

Msgbox "数值超出范围!"

End IfSelect Case

Dim Color, MyVar

Sub ChangeBackground (Color)

MyVar = lcase (Color)

Select Case MyVar

Case "red" document.bgColor = "red"

Case "green" document.bgColor = "green"

Case "blue" document.bgColor = "blue"

Case Else MsgBox "选择另一种颜色"

End Select

End SubDo…loop

Sub ChkFirstWhile()

Dim counter, myNum

counter = 0

myNum = 20

Do While myNum > 10

myNum = myNum - 1

counter = counter + 1

Loop

MsgBox "循环重复了 " & counter & " 次。"

End SubFor...Next

For...Next语句用于将语句块运行指定的次数。在循环中使用计数器变量,该变量的值随每一次循环增加或减少。

Sub DoMyProc50Times()

Dim x

For x = 1 To 50

MyProc

Next

End Sub

关键字Step用于指定计数器变量每次增加或减少的值。在下面的示例中,计数器变量j 每次加2。循环结束后,total的值为2、4、6、8和10的总和。

Sub TwosTotal()

Dim j, total

For j = 2 To 10 Step 2

total = total + j

Next

MsgBox "总和为 " & total & "。"

End Sub

Exit For语句用于在计数器达到其终止值之前退出For...Next语句。因为通常只是在某些特殊情况下(例如在发生错误时)要退出循环,所以可以在If...Then...Else语句的True语句块中使用Exit For 语句。如果条件为False,循环将照常运行。For Each...Next

For Each...Next循环与 For...Next循环类似。For Each...Next不是将语句运行指定的次数,而是对于数组中的每个元素或对象集合中的每一项重复一组语句。这在不知道集合中元素的数目时非常有用。

例如:定义一个数组,数组中存放5个员工的编号,其中只有一个编号为空。

需要编写For each循环,对每个变量进行判断:

如果找到该信息,就退出循环,并把编号为空的数组元素所在的位置打印出来。

Dim myArray(4),count

For count = 0 To 4

myArray(count) = InputBox ("请输入员工编号")

Next

count = 0

For Each i In myArray

If i = "" Then

MsgBox "数组中第" & count + 1 & "个员工编号为空"

Exit For

End If

count = count+1

Next

VBScript过程函数

在VBScript中,过程被分为两类Sub过程和Function过程。Sub 过程

Sub无返回值,输出过程需在Sub过程内完成。

Sub username()

username= InputBox("请输入用户名。", 1)

MsgBox "用户名为:"&username

End Sub

Call username()Function 过程

可以返回结果,返回数据赋值给Function过程名。

Function addcalc(a,b)

result = a+b

addcalc= result

End Function

test=addcalc(1,2)

Msgbox test

文件操作文本文件操作

VBScript对文件操作使用FileSystemObject对象完成。FileSystemObject对象提供了大量的属性、方法和事件,来处理文件夹和文件。

创建FileSystemObject对象:

Set fso = CreateObject ("Scripting.FileSystemObject")

文本文件读取:

Option Explicit

Const ForReading = 1

Const ForWriting = 2

Const ForAppending = 8

Dim fso, file, msg

Set fso = CreateObject ("Scripting.FileSystemObject")

Set file = fso.OpenTextFile (“c:\UFT_file\testdata.txt", ForReading)

Do While Not file.AtEndOfStream

msg = file.ReadLine

MsgBox msg

Loop

file.Close

Set file = Nothing

Set fso = Nothing

文本文件写:

Function WriteLineToFile

Const ForReading = 1, ForWriting = 2

Dim fso, fp

Set fso = CreateObject ("Scripting.FileSystemObject")

Set fp = fso.OpenTextFile ( "c:\UFT_file\testfile.txt", ForWriting, True)

fp.WriteLine "Hello world!"

fp.WriteLine "VBScript is fun!“

fp.Close

set fso=nothing

set fp=nothing

End Function

WriteLineToFileExcel文件访问

创建Excel对象:Set xlApp = CreateObject ("Excel.Application"),通过调用Excel对象的方法和属性来操作Excel文件。

Excel读案例:

Dim xlApp, xlFile, xlSheet

Dim iRowCount, iLoop, numAdd

Set xlApp = CreateObject ("Excel.Application")

Set xlFile = xlApp.Workbooks.Open ("c:\login.xls")

Set xlSheet = xlFile.Sheets("Sheet1")

iRowCount = xlSheet.usedRange.Rows.Count

For iLoop = 1 To iRowCount

numAdd = xlSheet.Cells(iLoop,1)

MsgBox numAdd

Next

xlFile.Close

xlApp.Quit

Set xlSheet = Nothing

Set xlFile = Nothing

Set xlApp = Nothing

uft怎么做app自动化测试_UFT自动化测试实施-VBS编程简要教程相关推荐

  1. uft怎么做app自动化测试_UFT/QTP自动化测试框架详解

    前言 很多从事测试的朋友都会接触到自动化测试或要求有自动化测试的技能,自动化测试已成为测试行业发展的趋势.自动化测试的工具有很多且各有所长,UFT(QTP)是最流行的测试工具之一,因此很多公司在招聘时 ...

  2. 干货|手把手教你做app自动化测试

    什么是App自动化?为什么要做App自动化? App自动化是指给 Android或iOS上的软件应用程序做的自动化测试. 手工测试和自动化测试的对比如下: 手工测试优势:不可替代.发现更多bug.包含 ...

  3. 【软件测试】什么样的项目适合做自动化测试?自动化测试有需要那些技术?

    少部分从事软件自动化测试,会接触底层服务端.API .Web.APP.H5 等等,对自动化有了解. 想做自动化,首先得了解一下自动化测试的一些常见问题. 也是面试时,必问的一些问题(这么简单的面试问题 ...

  4. 怎样玩儿转App手游自动化测试?

    Iphone7面世以来,激起了一波又一波的评论与关注,对于它的强势来袭,更多手机厂商也纷纷推出了"应战机型",面对不断的手机广告与测评信息,笔者不得不赞叹如今智能终端更新频率之高, ...

  5. 基于Ruby的watir-webdriver自动化测试方案与实施(四)

    接着基于Ruby的watir-webdriver自动化测试方案与实施(三) http://www.cnblogs.com/Javame/p/4159468.html 继续 ... ... 首先回忆下我 ...

  6. Android标准App的四大自动化测试

    WeTest导读 说起Android的自动化测试,相信有很多小伙伴都接触过或者有所耳闻,本文从框架最基本的功能介绍及API的使用入手,结合简单的项目实战来帮忙大家对该框架进一步理解和加深印象.下面让我 ...

  7. Android标准APP的四大自动化测试法宝

    测试开发者的共同关注! 作者:Ringoyan,腾讯测试开发工程师.先后为植物大战僵尸Online,糖果传奇等游戏担任测试经理,其负责的"我叫MT2"测试项目曾获腾讯互动娱乐精品文 ...

  8. 手把手教你Android标准App的四大自动化测试法宝

    作者:Ringoyan,腾讯测试开发工程师.先后为植物大战僵尸Online,糖果传奇等游戏担任测试经理,其负责的"我叫MT2"测试项目曾获腾讯互动娱乐精品文化奖银奖.目前担任腾讯W ...

  9. 自动化测试如何实施落地?详细教程来了

    目录 前言 落地前:分析因素 开展前:评估价值 落地过程:解决问题 推广运营:关注反馈&输出价值 文末总结 重点:配套学习资料和视频教学 前言 这篇文章, 就聊聊自动化项目如何落地,以及落地要 ...

  10. 软件测试 自动化测试 Web自动化测试01 selenium 定位元素方法 元素操作 自动化脚本开发

    文章目录 1 自动化测试概述 1.1 测试的目的 1.2 自动化测试的优点 1.3 自动化测试的缺点 1.4 自动化测试工具 1.5 自动化测试流程 2 selenium基础 2.1 selenium ...

最新文章

  1. 动态指定超链接参数的几种方法(Passing a JavaScript variable into href of )
  2. 用OpenCV玩《铁拳》!!!
  3. golang mysql自动重连_rabbitmq消费者插入mysql数据并实现断线自动重连
  4. 【天池直播】图像系列直播第一讲--带你入坑深度学习
  5. Linux系统监控工具
  6. 进一步了解 apt-get 的几个命令
  7. 【Pytorch神经网络理论篇】 09 神经网络模块中的损失函数
  8. Linux下 查看网络连接状态的命令是,查看Linux操作系统下的网络连接状态命令
  9. (230)数据处理或加速方法(加速处理器)
  10. 设计师不用下课了吧?小米突然官宣性价比之王旗舰:升降式摄像头
  11. 得到本机或者网络上共享打印机的状态和打印任务
  12. 【Linux】关于Linux操作系统的基本操作
  13. java socket 中文乱码_java-Socket接受中文乱码的解决 | 学步园
  14. 【LeetCode】59. Spiral Matrix II
  15. os.path.join()函数
  16. 手机麦克风结构原理图_一文看懂咪头的工作原理及结构(驻极体话筒) - 全文...
  17. 学习微机原理与接口这一篇就够了
  18. 微信小程序 支付宝小程序 实现省市区县四级联动
  19. c语言多个大写变小写字母,c语言大写字母转换成小写字母
  20. MEMS传感器的下一轮技术变革

热门文章

  1. cdr怎么转plt_win10系统怎么将cdr格式转换成plt?
  2. centos下ftp服务器搭建
  3. 电子基础大全:整理了电子设计所需的基础知识
  4. 调用企业微信接口发送微信消息
  5. 扩展欧几里得算法的实现
  6. 高端物理学名词_物理专业名词
  7. 计算机学院实验室安全管理办法,计算机科学学院实验室安全管理制度
  8. 启动tomcat8时出现springfox.documentation.spi.service.contexts.OperationContext.headers()Ljava/util/Set;错误
  9. 格雷码与二进制转换的verilog实现
  10. Mysql如何清空数据库的单表数据 , 所有表数据