外部VBS的调用
一.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的调用的更多相关文章
- QTP学习一添加默认的注释及调用外部vbs文件
一.添加默认注释 1.新建一个TXT文档,将要添加的注释写在文档中 2.再将文档名改为:ActionTemplate.mst 3.将文件放到QTP安装目录(默认为:C:\Program Files\H ...
- Axure文本框验证和外部url的调用
文本框的验证和外部url的调用: 场景: 当输入文本框中的内容是满足下面条件时:输入4-10的数字,页面会跳转到QQ注册(https://ssl.zc.qq.com/v3/index-chs.html ...
- python 全栈开发,Day94(Promise,箭头函数,Django REST framework,生成json数据三种方式,serializers,Postman使用,外部python脚本调用django)
昨日内容回顾 1. 内容回顾 1. VueX VueX分三部分 1. state 2. mutations 3. actions 存放数据 修改数据的唯一方式 异步操作 修改state中数据的步骤: ...
- awk引用外部变量及调用系统命令方法
目标:想用awk与scp命令批量传送文件 前提:先搭好主机间的免密登陆环境(参考:http://www.cnblogs.com/tankaixiong/p/4172942.html) 实现脚本方法: ...
- bat运行时自己隐藏黑框,而不是用vbs来调用自己
//autoStart.bat @echo off if "%1" == "h" goto begin mshta vbscript:createobject( ...
- Slickflow.NET 开源工作流引擎高级开发(一) -- 流程外部事件的调用和变量存储实现
前言:流程实现基本流转功能外,通常也需要调用外部事件,用于和业务系统的交互,同时存储一些流程变量,用于追踪和记录业务数据变化对流程流转的影响. 1. 流程事件 流程执行过程中,伴随各种事件的发生,而且 ...
- 外部python脚本调用django 手动清理session
调试orm 在django项目根目录下创建文件test_orm.py,它和manage.py是同级的 import os if __name__ == "__main__": # ...
- 外部事件触发调用对象方法时this指向问题
问题如下: var obj = { name: 'dang', test:function(){ alert(this.name); } }; obj.test(); //这样是可以的 $('.box ...
- VBS 脚本调用
https://my.oschina.net/Tsybius2014/blog/602641
随机推荐
- TheSeventhWeekJavaText
如何用二维数组绘制五子棋盘 在定义一个棋盘类,声明一个二维字符数组,为每一个数组元素赋值为"+",打印输出就是一个简单地棋盘,如下图: 然后定义BufferedReader的实例对 ...
- 更换jdk版本:jdk1.8更换为jdk1.7之后输入java -version还是出现1.8的版本号
安装了1.7之后修改了JAVA_HOME的环境变量 修改成功之后,在cmd输入java -verson还是出现1.8的版本号 解决办法:将环境变量Path中的%JAVA_HOME%/bin 移到最前面 ...
- SVN常用命令积累
一.SVN SW (repo 重定向) 服务器的IP地址或者URL变更,版本库服务器的IP也要修改,因为当初安装SVN URL没有使用别名,所以使用的人都要修改客户端的IP. 1.Windows ...
- MVC学习笔记--IEnumerable的用法
IEnumerable的用法 IEnumerable和IEnumerable<T>接口在.NET中是非常重要的接口,它允许开发人员定义foreach语句功能的实现 并支持非泛型方法的简单的 ...
- Spring 整合 Redis出现的一个Timeout方法找不到的问题
直接说问题吧. 依赖包:jedis 2.9.0. spring-data-reids 1.4.1 提示:redis.clients.jedis.JedisShardInfo.setTimeout(I) ...
- 老司机的奇怪noip模拟T1-guanyu
1. 关羽(guanyu.cpp/c/pas )[问题描述]xpp 每天研究天文学研究哲学,对于人生又有一些我们完全无法理解的思考.在某天无聊学术之后, xpp 打开了 http://web.sang ...
- L3-004. 肿瘤诊断
L3-004. 肿瘤诊断 题目链接:https://www.patest.cn/contests/gplt/L3-004 BFS 之前尝试使用递归dfs,提交后发现有两个段错误,发现递归层数太多,然后 ...
- ios 实现在tableViewCell上面添加长按手势 删除该条cell以及列表后台数据等
自己的代码 需要 把属性更改成自己要使用的 //创建长按手势 在cellForRowAtIndexPath代理方法中 UILongPressGestureRecognizer *longPres ...
- 数据库 Mysql内容补充一
mysql时间函数 --获取当前日期 select current_date(); --获取当前时间 select current_time(); --获取当前的日期和时间 select now(); ...
- [CSS备忘]多行文本省略号
overflow : hidden; text-overflow: ellipsis; display: -webkit-box; -webkit-line-clamp: 4; -webkit-box ...