VBS基于对象,只能利用现成的对象,不能封装、继承等,意味着不是真正的面向对象

语言的学习:

1.数据定义,变量定义,表达式

2.程序控制结构

3.函数,方法,类

4.异常处理

VBScript的数据类型

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

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

Variant数据子类型

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

Null:不包含任何有效数据的Variant

Boolean:包含True或False

Byte:包含0到255之间的整数

Integer:包含-32768到32767之间的整数

Currency:货币类型

Long:包含-2147483648到2147483647之间的整数

Single:单精度浮点数

Double:双精度浮点数

Data(Time):包含表示日期的数字,日期范围从公元前100年1月1日到公元9999年12月31日

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

Object:包含对象

Error:包含错误号

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

可以使用转换数函数来转换数据的子类型,另外,可以使用vartype的函数返回数据的Variant子类型。

VBScript变量

声明变量

使用dim语句、public语句和private语句在脚本中显示声明变量,例如:dim username

声明多个变量时,使用逗号分隔变量,例如:dim top , bottom , left , right

如在同一行内给多个变量赋值,则不同变量之间用:分隔,如 a = 0 : b = 0

另一种方式是通过直接在脚本中使用变量名这一简单方式隐式声明变量。这通常不是一个好习惯,因为这样有时会由于变量名被拼错而导致在运行脚本时出现意外的结果。因此,最好使用opinion explicit语句显示声明所有变量,并将其作为脚本的第一句。

命名规则

第一个字符必须是字母

不能包含嵌入的句点

长度不能超过255个字符

在被声明的作用域内必须唯一

Example1

msgbox “Hello World!”

Example2

a = “Hello World!”

msgbox varitype(a)

Example3

a = “Hello World!”

b=1

msgbox a+b(提示错误,类型不匹配! msgbox a & b)

Example3

opinion explicit ’(强制申明,如需使用,必须放在首行)

dim hellomsg

hellomsg=”hello world!”

msgbox hellomsg

标量变量和数组变量

标量:只包含一个值的变量称为标量变量,如:a = 0

数组变量:创建可以包含一系列值得变量,称为数组变量。声明数组变量时变量名后面有括号(),如dim A(10)。在VBScript中所有数组变量都是基于0,在基于0的数组中,数组元素的数目总是括号中显示的数目加1。这种数组称为固定大小的数组。

要使用动态数组,必须随后使用redim确定维数和每一维的大小,使用preserve关键字在重新调整大小时保留数组的内容。重新调整动态数组大小的次数是没有任何限制的,尽管将数组的大小调小时,将会对视被删除元素的数据。

 

Example3:数组的使用

1.用for each表达式获取数组的每一个值

dim a

a = array(10.20.30)

for each i in a

msgbox i

next

2.用for循环构造数组

dim arr(10)

for i = 0 to ubound(arr)

arr(i)=i

msgbox arr(i)

next

msgbox “数组的上边界是:” & ubound(arr)

msgbox “数组的上边界是:” & lbound(arr)

3.VBS动态数组使用

i = 0:nstr = ….

dim myarray()

do

a = inputbox(“循环直到输入4为止”)

‘redim preserve myarray(i)

redim myarray(i)

myarray(i) = a

i = i + 1

loop untial a = “4”

for i = 0 to ubound(myarray)

nstr = nstr & myarray(i) & “,”

next

msgbox nstr

 

VBScript常数

常数是具有一定含义的名称,用于代替数字或字符串,其值被创建后就不允许再被改变。VBScript定义了许多内部函数。例如:msgbox “提示信息:” & vbcrlf & “操作成功” , vbinformation , “title”

创建常数

使用const语句在VBScript中创建用户自定义常数。使用const语句可以创建名称具有一定含义的字符串型或整数型常数,并给他们赋原义值,例如:

const  conusername = “frank”

const  pi = 3.14159

const  conolympicdata = #08/08/08#

最好采用一个命名方案一区分常量和变量,这样可以避免运行脚本时常数重新赋值。例如,可以用”vb”或”con”作常数名前缀,或将常数名的所有字母大写。将常量和变量区分开来可以在开发复杂的脚本时避免混乱。

 

常用的常数

vbcr 回车符    vblf 换行符    vbcrlf 回车符与换行符    vbnewline 新行字符

VBScript运算符

算数运算符

比较运算符

逻辑运算符

求幂

^

等于

=

逻辑非

not

负号

-

不等于

<>

逻辑与

and

*

小于

<

逻辑或

or

/

大于

>

逻辑异或

xor

整除

\

大于等于

>=

逻辑等价

eqv

求余

mod

小于等于

<=

逻辑隐含

imp

+

对象引用比较

is

-

字符串连接

&

VBScript条件语句

使用条件语句和循环语句可以控制脚本的流程。使用条件语句可以编写进行判断和重复操作的VBScript代码。在VBScript中使用以下条件语句:

if … then … else 语句,条件为true和false时分别运行某些语句

条件为true时运行语句,例如:ifmydata < now  then  mydata = now  ‘单行不用加end if

select case语句,对多个条件进行判断,例如:

select case value

case 1

msgbox “hello world!”

case 2

msgbox “hello software testing! ”

case 3

msgbox “hello 51testing!”

end select

VBScript循环语句

循环用于重复执行一组语句。循环可分为三类:①在条件变为false之前重复执行语句;②条件变为true前重复执行语句;③按照指定的次数重复执行语句。

在VBScript中可以使用下列循环语句:

do…loop:当(或直到)条件为true是循环,退出循环用exit do

while…wend:当条件为true时循环,while循环没有退出语句

for…next:指定循环次数,使计数器重复运行语句,退出for语句用exit for。默认计数器每次加1,但可以用step关键字指定每次循环计数器增加的值。

for each…next:对于集合中的每项或数组中的每个元素,重复执行一组语句。

 

Example4

for i = 0 to 10 step 3

msgbox i

next

VBScript中的with语句

对一个对象执行一系列的语句。

语法:

with object

statement

end with

 

Example5

with window(“计算器”)

.einbutton(“7”.click)

.einbutton(“+”.click)

.einbutton(“6”.click)

.einbutton(“=”.click)

end with

当程序一旦进入with块,object就不能改变。因此不能用一个with语句来设置多个不同的对象。with语句可以嵌套。

VBScript过程

在VBScript中,过程被分为两类:sub过程和function过程。

sub过程

sub过程是包含在sub和end sub语句之间的一组VBScript语句,执行操作但不返回值,sub过程可以使用参数(由调用过程传递的常数、变量或表达式)

声明sub过程的名称、参数以及构成其主体的代码:

[public [default] | private] sub name [(arglist)]

[statement]

[exit sub]

[statement]

end sub

function过程

function过程是包含在function和end function语句之间的一组VBScript语句。function过程与sun过程类似,但是function过程可以返回值。function过程可以使用参数(由调用过程传递的常数、变量或表达式)。function过程通过函数名返回一个值,这个值是在过程的语句中赋给函数的。function返回值的数据类型总是variant。

声明function过程的名称、参数以及构成其主体的代码:

[public [default] | private] function name [(arglist)]

[statement]

[name = expression]

[exit function]

[statement]

[name = expression]

end function

Example5

function getname(name)

getname = name

end function

msgbox getname(“张三”)

 

过程中的arglist参数:

[byval | byref] varname[()]

byval表示该参数按值传递

byref表示该参数按引用传递,系统默认使用这种传值方式

varname表示参数的变量名称,遵循标准标量命名规则

过程的声明:

没有显示地指定使用public或private,则sub/function过程默认为公用,即它们对于脚本的所有其他过程都是可见的。sub/function过程中局部变量的值在调用过程中不被保留。

过程的调用:

使用call语句调用(函数返回值将别丢失)

直接输入过程名调用

支持递归调用

 

Example6:byval和byref的区别

opinion explicit

dim msg

msg = “nice to meet you”

changebyval msg

msgbox msg

changebyrefl msg

msgbox msg

function changebyrefl(byref  sentense)

sentence = sentence & “,too”

end function

function changebyvall(byval  sentense)

sentence = sentence & “,too”

end function

VBScript的编码规范

编码约定

1.对象、变量和过程的命名规范

匈牙利命名法:变量名=类型名+类型+对象描述

骆驼命名法:除首单词外其他首字母大写

帕斯卡命名法:所有单词首字母大写

2.注释约定

不要在代码行的结尾处使用注释,要将注释放在单独的行

注释文本以大写字母开头

注释以句点结束

在注释分隔符(‘)和注释之间插入一个空格

请勿创建已设置格式的将注释包含在内的星号块

3.文本格式和缩进指南

关键字空一格,运算符两边不加空格,括号内侧空一格

缩进四个空格为单位

函数之间空两行

语句块的配对对齐

VBScript变量的命名规则

类型

前缀

示例

Variant

var

varArray

Boolean

bln

blnFound

Byte

byt

bytRasterData

Date(Time)

dtm

dtmStart

Double

dbl

dblTolerance

Error

err

errOrdeNum

Integer

int

intQuantity

Long

lng

lngDistance

Object

obj

objCurrent

Single

sng

sngAverage

String

str

strFirstName

Example7:

‘**************************************

‘目的:在UserList数组中

‘定位指定用户的首次出现。

‘输入:strUserList():要搜索的用户列表

‘strTargetUser:要搜索的用户名。

‘返回:索引strUserList数组中

‘strTargetUser的首次出现。

‘如果找不到目标用户,则返回-1。

‘**************************************

Function intFindUser(strUserList(), strTargetUser)

Dim i  ‘loop counter

Dim blnFound  ‘找到目标标志

intFindUser = -1

i = 0  ‘初始化循环计数器

do while i < ubound(strUserList) and not blnfound

if strUserList(i) = strTargetUser then

blnfound = true  ‘将标志设置为true

intFindUser = i  ‘将返回值设置成循环计数

end if

i = i + 1  ‘递增循环计数器

loop

end function

VBScript的常用函数

字符串函数:

len函数

left函数

mid函数

right函数

instr函数

instrrev函数

ltrim、rtrim和trim函数

lcase函数

ucase函数

replace函数

strcomp函数

split函数

join函数

转换函数:

asc函数

chr函数

str函数

val函数

cbool函数

cbyte函数

ccur函数

cdte函数

cdbl函数

cint函数

clng函数

csng函数

cstr函数

判断函数:

isarray函数

isdata函数

isempty函数

isnumeric函数

isnull函数

isobject函数

varitype函数

typename函数

时间函数:

date函数

day函数

hour函数

minute函数

mounth函数

now函数

second函数

time函数

weekday函数

weekdayname函数

year函数

其它函数:

rnd函数和randomize语句

公式:int((upperbound – lowerbound + 1) * rnd + lowerbound)

例子:生成指定范围的10个随机数

creatobject函数(注意使用set来给对象赋值)

set myobj = creatobject(“wscript.shell”)

set myobj = creatobject(“excel.application”)

set myobj = creatobject(“scripting.filesystemobject”)

set myobj = creatobject(“scripting.dictionary”)

set myobj = creatobject(“adodb.connection”)

set myobj = creatobject(“adodb.recondset”)

set myobj = creatobject(“microsoft.xmldom”)

set myobj = creatobject(“internetexplorer.application”)

getobject函数

int、fix函数

lbound、ubound函数

msgbox、inputbox函数

Example8

dim a(10)

min = inputbox(“请输入下边界:”)

min = inputbox(“请输入上边界:”)

randomize

for I = 0 to ubound(a) – 1

a(i) = int((max – min + 1)*rnd + min)

msgbox a(i)

next

小练习

1.数组练习

假设现在有一数组(”0”,”1”,”2”,”3”,”4”,”5”,”a”,”b”,”c”,”d”),用户可以输入一个值,程序判断用户输入的这个值是否在数组中。(使用两种方法实现)

Dim arr, i, str

arr = array("1", "2", "3", "4", "5", "a", "b", "c", "d")

str = inputbox("输入字符","")

if str <> ""  then

for i = 0 To UBound(arr)

If arr(i) = str Then

exit For

end if

Next

if i <= UBound(arr) then

msgbox  "数组中包含" & str

else

msgbox  "a数组中不包含" & str

end if

end if

2.随机数

用程序编写并生成4为随机验证码,验证码范围:大写字母、小写字母、数字。

msgbox getranstring(4)

function getranstring(byval ilen)

dim i

for i = 1 to ilen

getranstring = getranstring & generatevericode()

next

end function

function

generatevericode()

dim iget

iget = getrndnumber(1,3)

select case iget

case 1

generatevericode = chr(getrndnumber(48,57))

case 2

generatevericode = chr(getrndnumber(65,90))

case 3

generatevericode = chr(getrndnumber(97,122))

case else

generatevericode = “err_code”

end select

end function

function getrndnumber(byval lowerbound, byval upperbound)

randomize

getrndnumber = int((upperbound – lowerbound + 1) * rnd + lowerbound)

end function

VBScript中的文件读写

1.文本文件的读写

option explicit

constforreading = 1, forwriting = 2, forappending = 8

dim fso, file, msg

set fso = fso.createobject(“scripting.filesystemobject”)

set file = fso.opentextfile(“c:\calc.text”, forreading)

while (not file.atendofstream)

msg = msg & file.readline & chr(13) & chr(10)

wend

msgbox msg

file.close

set file = nothing

set fso = nothing

2.Excel文件的读写

dim xlapp, xlworkbook, xlsheet

dim irowcount, iloop, numadd

set xlapp = createobject(“excel.application”)

xlapp.visible = true

set xlworkbook = xlapp.workbooks.open(“c:\data.xls”)

set xlsheet = xlworkbook.sheets(“sheet1”)

irowcount = xlsheet.usedrang.rows.count

for iloop = 2 to irowcount

numadd = xlsheet.cells(iloop, 1)

next

xlworkbook.save

xlworkbook.close

xlapp.quit

set xlsheet = nothing

set xlworkbook = nothing

set xlapp = nothing

3.数据库文件的读写

dim cnn, rst, strcnn

strcnn = “provider = Microsoft.jet.oledb.4.0; data sourse = c:\calc.mdb; persist security info = false”

set cnn = creatobject(“adodb.connection”)

cnn.open strcnn

set rst = createobject(“adodb.recordset”)

rst.open “select * from calc”,cnn

rst.movefirst

do while not rst.eof

msgbox trim(rst.fields(“testresult”))

rst.movenext

loop

rst.close

cnn.close

set rst = nothing

set cnn = nothing

4.XML文件的读写

dim xmldoc, xmlroot, rootchildltem, msg

set xmldoc = createobject(“Microsoft.xmldom”)

xmldoc.async = false

xmldoc.load”c:\calc.xml”

if xmldoc.paeseerror.errorcode <> o then

msgbox “xml loaded failed. the reson is:” & xmldoc.parseerror.reason

exit sub

end if

set xmlroot = xmldoc.docunentelement

if not xmlroot.haschildnodes then exit sub

for each rootchildltem in xmlroot.childnodes

if rootchildltem.nodename = “testcase” then

msg = msg & rootchildltem.firstchild.nodevalue & vbnewline

end if

next

msgbox msg

自动化测试(四):VBScript脚本语言的更多相关文章

  1. Perl,Python,Ruby,Javascript 四种脚本语言比较

    Perl 为了选择一个合适的脚本语言学习,今天查了不少有关Perl,Python,Ruby,Javascript的东西,可是发现各大阵营的人都在吹捧自己喜欢的语言,不过最没有争议的应该是Javascr ...

  2. (四)Lua脚本语言入门

    这篇文章就当成铺垫型的文章,写着写着发现有好多想写的,,关于C#与Java,当然作为铺垫肯定与Lua的下部分介绍有关..... 对于"泛型",先看C#中"泛型" ...

  3. (四)Lua脚本语言入门(数组遍历)

    这篇文章就当成铺垫型的文章,写着写着发现有好多想写的,,关于C#与Java,当然作为铺垫肯定与Lua的下部分介绍有关..... 对于"泛型",先看C#中"泛型" ...

  4. shell、cmd、dos和脚本语言杂谈(转)

    问题一:DOS与windows中cmd区别   在windows系统中,“开始-运行-cmd”可以打开“cmd.exe”,进行命令行操作. 操作系统可以分成核心(kernel)和Shell(外壳)两部 ...

  5. shell、cmd、dos和脚本语言区别和联系

    问题一:DOS与windows中cmd区别   在windows系统中,“开始-运行-cmd”可以打开“cmd.exe”,进行命令行操作. 操作系统可以分成核心(kernel)和Shell(外壳)两部 ...

  6. shell、cmd、dos和脚本语言

    问题一:Shell是什么? 操作系统可以分成核心(kernel)和Shell(外壳)两部分,其中,Shell是操作系统与外部的主要接口,位于操作系统的外层,为用户提供与操作系统核心沟通的途径.Shel ...

  7. 脚本语言丨Batch入门教程第四章:调用与传参

    今天是Batch入门教程的最后一章内容:调用与传参.相信通过前面的学习,大家已经掌握了Windows Batch有关的基础知识和编程方法,以及利用Windows Batch建立初级的编程思维方式.今后 ...

  8. java+win7+eclipse+Maven+sikuli 配置总结---图形脚本语言

    简介:Sikuli 是一种新颖的图形脚本语言,或者说是一种另类的自动化测试技术.它与我们常用的自动化测试技术(工具)有很大的区别. 关于配置,一直是一个问题,下面做个总体介绍,用sikuli也有几个月 ...

  9. 关于《Selenium3自动化测试实战--基于python语言》

    2016年1月,机缘巧合下我出版了<Selenium2自动化测试实战--基于python语言>这本书,当时写书的原因是,大部分讲Selenium的书并不讲编程语言和单元测试框,如果想在项目 ...

随机推荐

  1. 进入 App Store 打分

    很多用户用了好软件后忘记或嫌麻烦而不去 App Store 进行打分评星,为此开发者可以在应用中加入打分按钮,点击后直接跳转到 App Store 的评分界面. App Store 上评论的链接地址是 ...

  2. CSS3圆角气泡框,评论对话框

    <title>CSS3圆角气泡框,评论对话框</title> <style> body { ; ; font:1em/1.4 Cambria, Georgia, s ...

  3. sql之left join、right join、inner join的区别(转)

    感谢:http://www.cnblogs.com/pcjim/articles/799302.html ----------------------------------------------- ...

  4. BZOJ 1741: [Usaco2005 nov]Asteroids 穿越小行星群

    Description 贝茜想驾驶她的飞船穿过危险的小行星群.小行星群是一个NxN的网格(1≤N≤500),在网格内有K个小行星(1≤K≤10000). 幸运地是贝茜有一个很强大的武器,一次可以消除所 ...

  5. linux telnet命令参数及用法详解--telnet连接远程终端命令

    功能说明:远端登入. 语 法:telnet [-8acdEfFKLrx][-b<主机alias.html' target='_blank'>别名>][-e<脱离字符>][ ...

  6. poj 2454 Jersey Politics 随机化

    随机化算法+贪心! 将3*k排序后分成3分,将第二第三份的和分别加起来,让和与500*k比较,都大于则输出,否则,随机生成2个数,在第二第三份中交换! 代码如下: #include<iostre ...

  7. MySQL提示:The server quit without updating PID file问题的解决办法

    错误如下: [root@snsgou mysql]# service mysql restartMySQL server PID file could not be found![失败]Startin ...

  8. EntityFreamwork 读写分离

    http://www.cnblogs.com/cjw0511/p/4391092.html

  9. cmd启动tomcat

    1.安装jdk 2.安装tomcat 3.需要配置两个用户环境变量,仅仅配置系统变量没用. a)JAVA_HOME:D:\programing~tools\java~tools\JDK(tm)\jdk ...

  10. C动态内存分配(C与指针实例)

    主要初步介绍malloc.free.calloc.realloc的基本.日后会有更详细的内容. malloc.free分别用于动态内存分配和释放. malloc会从内存池里提取一块合适的内存(连续的) ...