一.QTP调用外部VBS的方法

加到QTP的Resource中

在QTP菜单中设置, 菜单FileàSettingsàResource,将要加载的VB脚本添加进来。

举例:

步骤1:在D盘下新建一个VBS文件,叫“ test.vbs”,脚本内容如下:

Function fun(a, b)

fun=a+b

End Function

步骤2:在QTP 里新建一个Test, 叫“Test1“,点击菜单FileàSettingsàResource,将要加载的VB脚本“ test.vbs”加进来

步骤3:在脚本里调用这个函数:

msgbox "1+2= “&fun(1,2)

运行结果:

使用QTP函数ExecuteFile

通过ExecuteFile方法将要加载的VBS脚本加载进来。

语法:ExecuteFile  “Filename”

参数说明:Filename-是要执行的文件的名称,包括文件路径。最好用绝对路径。

举例:

步骤1:在D盘下新建一个VBS文件,叫“ test.vbs”,脚本内容如下:

Function fun(a, b)

fun=a+b

End Function

步骤2:在QTP里加载这个VBS脚本:

executefile "D:\test.vbs"

步骤3:在脚本里调用这个函数:

msgbox "1+2= “&fun(1,2)

运行结果:

使用VBS函数ExecuteGlobal

ExecuteGlobal是VBS的函数而非QTP特有的函数,,ExecuteGlobal的功能可以引入其它vbs文件的函数

语法:ExecuteGlobal statement

参数说明:statement-可以是一段函数体或一个字符串变量

举例:

步骤1:在D盘下新建一个VBS文件,叫“ test.vbs”,脚本内容如下:

Function fun(a, b)

fun=a+b

End Function

步骤2:在QTP里加载这个VBS脚本:

dim fso : set fso = createobject("scripting.filesystemobject")

executeglobal fso.opentextfile("D:\test.vbs ", 1).readall

set fso = nothing

步骤3:在脚本里调用这个函数:

msgbox "1+2= “&fun(1,2)

运行结果:

3种方法的优缺点

方法一:加到QTP的Resource中。 优点:是QTP自带的引用外部VBS函数的方法,非常稳定,同一个测试脚本的所有action都可以调用;缺点:不够灵活,经常的情况是使用同一个测试框架对于不同的项目需要引入不同的VBS文件。

方法二:使用QTP函数ExecuteFile。优点:灵活性好,方便自己写语句来引入函数;缺点:只能被当前的action调用,不能垮action调用,调试时黄色指针跳动混乱。

方法三:使用VBS函数ExecuteGlobal。优点:1.自己写代码,非常灵活

2.外部函数由于从内存中读取,避免了I/O,执行速度加快,而且通过这个方法调用其它文件函数非常稳定;缺点:一下子把可能需要用到的VBS文件全部读入内存,势必会增加内存开销。

实践

分别以导入文件的方式和使用ExecuteFile的方式关闭所有的浏览器和记事本

导入文件的方式

步骤1:新建脚本文件,另存为scritp.vbs

脚本如下:

Sub CloseIE()

systemutil.CloseProcessByName("IEXPLORE.EXE")

End Sub

Sub CloseNotepad()

systemutil.CloseProcessByName("Notepad.exe")

End Sub

File-->Settings-->Resources在“Associated function libraries”

步骤二:导入该文件

可以使用绝对路径,也可以使用相对路径,建议使用相对路径,如下图

步骤三:在QTP的专家视图中输入如下语句,执行,发现QTP把所有的浏览器和记事本都关闭了。

CloseIE()

CloseNotepad()

ExecuteFile的方式

步骤一:同上

步骤二:

executefile "..\script.vbs"

CloseIE()

CloseNotepad()

总结

1 在写VBS脚本时,为了避免语法错误.可以先在QTP里编写脚本,运行通过了,再保存成外部VBS脚本。

2 新建VBS脚本时,先新建一个文本文件,再将其后缀改成.VBS,注意,要先将文件的扩展名显示出来:工具à文件夹选项à查看, 把“隐藏已知文件类型的扩展名 ”的勾去掉。

否则, 文件的类型还是.txt的, 运行脚本时会提示“找不到文件”。

vbs外部调用的更多相关文章

  1. C#调用vbs脚本实现Windows版Siri

    最近新加入,把自己一些有意思的小东西分享给大家,我是一个学生,代码写得少,哪里不规范,希望大家见谅. 这事我封装好的一个类,可以直接实例化对象之后,调用"对象.Talk()"方法, ...

  2. 在WinCC中通过VBS操作SQL Server2005

    在项目中需要在一定条件满足时,保存一些数据到数据库中,并可根据条件查询.考虑到WinCC6.2以后采用的就是SQL Server2005数据库,所以直接利用该数据库即可,通过SQL Server Ma ...

  3. 使用vbs脚本进行批量编码转换

    使用vbs脚本进行批量编码转换 最近需要使用SourceInsight查看分析在Linux系统下开发的项目代码,我们知道Linux系统中文本文件默认编码格式是UTF-8,而Windows中文系统中的默 ...

  4. ECharts外部调用保存为图片操作及工作流接线mouseenter和mouseleave由于鼠标移动速度过快导致问题解决办法

    记录两个项目开发中遇到的问题,一个是ECharts外部调用保存为图片操作,一个是workflow工作流连接曲线onmouseenter和onmouseleave事件由于鼠标移动过快触发问题. 一.外部 ...

  5. vbs让电脑发音说话

    Dim vbs1 'set vbs1 = WScript.CreateObject("WScript.Shell") set vbs1 = WScript.CreateObject ...

  6. WSF脚本详解:组合JS和VBS代码

    1.概述 Windows Script Host除了提供一个对象模型之外,还提供了一种脚本框架,这就是WSF脚本.通过WSF约定的标记元素,可以将多种脚本语言写的代码块组合起来,完成任务.除此之外,还 ...

  7. HTA全解析:给VBS和JS一个强大的交互界面

    1.概述 HTA全称Html Application,在Windows中由mshta.exe加载执行,是一种本地程序.可使用html元素来构建界面,用JS或VBS来构建执行逻辑,从而强化Windows ...

  8. vbs 中文字符串

    vbs 字符串包含中文字符,文件以UTF-8无BOM格式保存,就会出现“编译器错误: 未结束的字符串常量”错误,改以ANSI保存就没有这个问题

  9. 使用bat/vbs/ahk对Windows下进行自动化操作

    回想90年代,我们在DOS下使用各种命令链对操作进行简化和自动化,如DOS 5.0添加的DosKey,利用管道和重定向对多组命令进行链式操作.后来使用了Ubuntu和其它Linux发型版后,bash下 ...

随机推荐

  1. WPF学习之路(十一)布局(续)

    布局实际上是一个Slot模型,其中每个父对象分配给子对象一个Slot,子对象可以自由占用Slot中的空间,通过Margin\VerticalAlignment\HorizontalAlignment控 ...

  2. 13、系统集成项目经理要阅读的书籍 - IT软件人员书籍系列文章

    系统集成项目经理主要对弱电等项目负责.一般包括计算机网络系统,计算机设备系统,智能楼宇,机房建设等.在软考中,系统集成项目经理放在了中级,这个只能说明系统集成项目经理需要的经验没有高级信息系统项目管理 ...

  3. 深入理解Angular中的$Apply()以及$Digest()

    $apply()和$digest()在AngularJS中是两个核心概念,但是有时候它们又让人困惑.而为了了解AngularJS的工作方式,首先需要了解$apply()和$digest()是如何工作的 ...

  4. yii2集成富文本编辑器redactor

    作者:白狼 出处:http://www.manks.top/article/yii2_redactor本文版权归作者,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保 ...

  5. pentaho cde 封装自定义图形控件,动态传参

    在实际项目中经常会用到将经常用到的图形表格组成一个控件,其他地方直接调用,类似于服务器开发的接口,而现在就需要将一些常用的图形做封装,这样就不必重复多次创建相同的内容. 下面就简单的定义一个自定义柱形 ...

  6. 简单阐述下Ajax以get方式请求的步骤 初学,不对的话,跟我说下,谢谢!

    首先, 在GET提交中"=,&"等字符与请求字符串的关键字相混淆.所以: 第一步,先对get提交过来的数据进行编码. 第二步,实例化ajax对象. 第三步,创建对服务器的连 ...

  7. 禁止用户选定文本: user-select

    双击文本 select,会被选定,如下 但有时点击元素时不想要被选定的状态,有一个尚未成为标准的 CSS 属性: user-select,它有 4 个值: text 可以选择文本 element 可以 ...

  8. 启动mysql错误ERROR 2002 (HY000): Can’t connect to local MySQL server through socket ‘/var/lib/mysql/mysql.sock’ (2)

    ERROR 2002 (HY000): Can’t connect to local MySQL server through socket ‘/var/lib/mysql/mysql.sock’ ( ...

  9. android apk 防止反编译技术第四篇-对抗JD-GUI

    又到周末一个人侘在家里无事可干,这就是程序员的悲哀啊.好了我们利用周末的时间继续介绍android apk防止反编译技术的另一种方法.前三篇我们讲了加壳技术(http://my.oschina.net ...

  10. inverse理解

    首先术语inverse 被翻译为反转的意思.inverse 制定了关联关系中的方向. 当set的inverse属性默认情况下,hibernate会按照持久化对象的属性变化来同步更新数据库. 得到两条s ...