外部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
随机推荐
- 关于jq的load不用回调获取其中dom元素方法
jq的load方法如果要操作其中的dom元素,需要使用回调,等其加载完了再进行dom元素的获取,今天看我们项目组长写的一段代码,发现不用回调也能获取到其中的元素. 具体是这样写的: <scrip ...
- linux 通过pid寻找程序路径的最简单命令
在linux实际操作命令中,查看pid的方式有很多种,通过pid找程序路径的方式也有好几个,但是可能大家都忽略的一个很简单也是很实用的命令:pwdx. 比如要查找某个java编写的程序运行情况可通过j ...
- mysql近几天的查询
今天:select*from table1 where to_days(时间字段名)=to_days(now()); 昨天:select*from table1 where to_days(now() ...
- selenium grid的使用与配置
一.selenium grid的组成与作用:由一个集线器hub和多个客户机node组成,如果你的程序需要在不用的浏览器,不同的操作系统上测试,而且比较多的case需要多线程远程执行,那么一个比较好的测 ...
- 关于微信端不支持window.location.reload()
今天写了一个调查问卷页面,项目经理说要表单提交之后页面刷新,之间没沟通清楚,以为整个页面重载,所以刚开始就用了window.location.reload()的方法. 但是发现,在微信直接打开之后,居 ...
- hdfs格式化hadoop namenode -format错误
在对HDFS格式化,执行hadoop namenode -format命令时,出现未知的主机名的问题,异常信息如下所示: [shirdrn@localhost bin]$ hadoop namenod ...
- Intent Flag实际项目 -- 超时跳转登录界面并清理前面所有activity
项目中涉及到登录超时跳转登录界面的逻辑,我以前的跳转flag为Intent.FLAG_ACTIVITY_CLEAR_TOP,但是点击返回按钮还是会回到上个界面.代码如下: ActivityUtils. ...
- express学习点滴- session()和cookieSession()的区别
express 里提供了两种有关session的中间件 * session() 提供了内存和数据库两种方式保存session.具体两种session原理请自行学习,不进行展开了.自己也是一知半解... ...
- Animate.css让添加CSS动画像喝水一样容易
在这个年代,你要是不懂一点点css3的知识,你都不好意思说你是个美工.美你妹啊,请叫我前端工程师好不好.呃..好吧,攻城尸...呵呵,作为一个攻城尸,没有点高端大气上档次的东西怎么能行呢,那么css3 ...
- 【Python@Thread】threading模块
theading模块的Thread类 属性: name 线程名 ident 线程标识符 daemon 布尔值,标示是否为守护线程 方法: __init__(target=None, name=Non ...