QTP关于AOM的Javascript启动方式
序
QTP的AOM模型想必大家都很熟悉了,平时常用的就是通过VBS脚本的方式编写启动程序(也是我现在用的方法)。其实,还有很多其他的方式,如Java,C#,JS,这些语言都是通过调用QTObjectModel.dll文件来实现AOM,该文件位于QTP安装目录bin文件夹下。
简单的启动代码
下面简单的介绍下通过JS的方式来调用AOM,主要工具是ActiveXObject对象。假设已完成自动化脚本编写并保存为D:\QTP\jsaom,代码如下
- <html>
- <head>
- <title>JS启动QTP</title>
- <meta http-equiv="Content-type" content="text/html" charset="utf-8">
- </head>
- <body>
- <input type="button" value="运行脚本" onclick="run();">
- <script type="text/javascript" language="javascript">
- function run(){
- // 创建AOM对象
- var qtpauto=new ActiveXObject("QuickTest.Application");
- //用于结束AOM进程
- var task_kill=new ActiveXObject("WScript.Shell");
- //启动QTP
- qtpauto.Launch();
- //设置可见
- qtpauto.Visible=true;
- //打开脚本文件
- qtpauto.open('D:\\QTP\\jsaom');
- //运行脚本
- qtpauto.Test.Run();
- //退出脚本
- qtpauto.Quit();
- //关闭AOM进程
- task_kill.Run("taskkill /f /im QTAutomationAgent.exe");
- }
- </script>
- </body>
- </html>
WScript.Shell对象用于关闭QTAutomationAgent.exe进程,在调用AOM是系统会自动生成此进程在脚本运行运行完毕后并不会自动退出,当我们调试代码时有时会报错,为了方便每次执行完毕kill就好了。
我们还可以在代码中指定运行时的参数和结果文件的保存路径
- <html>
- <head>
- <title>JS启动QTP</title>
- <meta http-equiv="Content-type" content="text/html" charset="utf-8">
- </head>
- <body>
- <input type="button" value="运行脚本" onclick="run();">
- <script type="text/javascript" language="javascript">
- function run(){
- // 创建AOM对象
- var qtpauto=new ActiveXObject("QuickTest.Application");
- //结果对象
- var qtpresult=new ActiveXObject("QuickTest.RunResultsOptions");
- //用于结束AOM进程
- var task_kill=new ActiveXObject("WScript.Shell");
- //启动QTP
- qtpauto.Launch();
- //设置可见
- qtpauto.Visible=true;
- //打开脚本文件
- qtpauto.open('D:\\QTP\\jsaom');
- //设置脚本只迭代一次
- qtpauto.Test.Settings.Run.IterationMode = "oneIteration";
- //设置等待对象出现的时间为20000毫秒即20秒
- qtpauto.Test.Settings.Run.ObjectSyncTimeOut = "20000";
- //出错时继续执行下一步
- qtpauto.Test.Settings.Run.OnError = "NextStep";
- //设置结果保存路径
- qtpresult.ResultsLocation = "D:\\QTP\\Res"
- //运行脚本
- qtpauto.Test.Run(qtpresult);
- //退出脚本
- qtpauto.Quit();
- //关闭AOM进程
- task_kill.Run("taskkill /f /im QTAutomationAgent.exe");
- }
- </script>
- </body>
- </html>
有了这些功能就可以用复选框来选择每次想要运行的脚本,为此我写了一个简单的例子,界面没怎么调,请轻喷。
- <html>
- <head>
- <title> js启动QTP</title>
- <meta http-equiv="Content-type" content="text/html" charset="utf-8">
- <link rel="stylesheet" href="qtp.css" type="text/css" >
- </head>
- <body>
- <h1>JavaScript启动QTP</h1>
- <div>
- <form name="select_testscript" method="post" action="">
- <table>
- <tr style="background-color: #6fcf6f">
- <td style="background-color: #0066CC;font-size:16px;color: #fff0f5;"><input type="checkbox" name="select_all" value="select_all" onclick="pick_all(this)">全选</td>
- <th colspan="4">请选择回归脚本</th>
- </tr>
- <tr>
- <td style="background-color: #6fcf6f"><input type="checkbox" name="test_normal_all" value="test_normal_all" onclick="line_pick_all(this)">测试脚本正常</td>
- <td style="background-color: #6fc6ff"><input type="checkbox" name="normal" value="演示脚本_正常_1">演示脚本_正常_1</td>
- <td style="background-color: #6fc6ff"><input type="checkbox" name="normal" value="演示脚本_正常_2">演示脚本_正常_2</td>
- <td style="background-color: #6fc6ff"><input type="checkbox" name="normal" value="演示脚本_正常_3">演示脚本_正常_3</td>
- <td style="background-color: #6fc6ff"><input type="checkbox" name="normal" value="演示脚本_正常_4">演示脚本_正常_4</td>
- </tr>
- <tr>
- <td style="background-color: #6fcf6f" rowspan="2"><input type="checkbox" name="test_exception_all" value="test_exception_all" onclick="line_pick_all(this)">测试脚本异常</td>
- <td style="background-color: #f6c6ff"><input type="checkbox" name="exception" value="演示脚本_异常_1">演示脚本_异常_1</td>
- <td style="background-color: #f6c6ff"><input type="checkbox" name="exception" value="演示脚本_异常_2">演示脚本_异常_2</td>
- <td style="background-color: #f6c6ff"><input type="checkbox" name="exception" value="演示脚本_异常_3">演示脚本_异常_3</td>
- <td style="background-color: #f6c6ff"><input type="checkbox" name="exception" value="演示脚本_异常_4">演示脚本_异常_4</td>
- </tr>
- </table>
- <br>
- <input type="button" value="运行脚本" onclick="run();" class="button">
- </form>
- </div>
- <script type="text/javascript" language="javascript">
- /*全选函数*/
- function pick_all(obj){
- var em_number=document.forms.select_testscript.elements;
- for(var i=0;i<em_number.length;i++){
- if(em_number[i].type=="checkbox"){
- if(obj.checked==true)
- em_number[i].checked=true;
- else
- em_number[i].checked=false;
- }
- }
- }
- /*每个类型全选函数*/
- function line_pick_all(obj){
- var objvalue=obj.value;
- objvalue=objvalue.substring(0,objvalue.length-4);
- var objname=document.getElementsByName(objvalue);
- if(obj.checked==true){
- for(var i=0;i<objname.length;i++)
- objname[i].checked=true;
- }else{
- for(var i=0;i<objname.length;i++)
- objname[i].checked=false;
- }
- }
- /*运行所选脚本*/
- function run(){
- var em_number=document.forms.select_testscript.elements;
- var script_name=new Array();
- var qtpauto=new ActiveXObject("QuickTest.Application");
- var qtpresult=new ActiveXObject("QuickTest.RunResultsOptions");
- // 获取已选中的复选框
- for(var i=0;i<em_number.length;i++){
- if(em_number[i].type=="checkbox"){
- if(em_number[i].checked==true && em_number[i].value.indexOf("_all")<0)
- script_name.push(em_number[i].value)
- }
- }
- qtpauto.Launch();
- qtpauto.Visible=true;
- // 运行选中脚本
- for(var j=0;j<script_name.length;j++){
- try{
- //打开脚本文件
- qtpauto.open('D:\\QTP\\'+script_name[j]);
- //设置脚本只迭代一次
- qtpauto.Test.Settings.Run.IterationMode = "oneIteration";
- //设置等待对象出现的时间为20000毫秒即20秒
- qtpauto.Test.Settings.Run.ObjectSyncTimeOut = "20000";
- //出错时继续执行下一步
- qtpauto.Test.Settings.Run.OnError = "NextStep";
- //设置结果保存路径
- qtpresult.ResultsLocation = "D:\\QTP\\Res"+script_name[j];
- qtpauto.Test.Run(qtpauto);
- }catch(err){
- alert("err.description");
- }
- }
- // 关闭QTPAOM进程
- qtpauto.Quit();
- var task_kill=new ActiveXObject("WScript.Shell");
- task_kill.Run("taskkill /f /im QTAutomationAgent.exe");
- }
- </script>
- </body>
- </html>
CSS文件
- body{
- text-align: center;
- margin:;
- padding:;
- font-family: Verdana, Geneva, sans-serif;
- background-color:#FFF;
- background-size: 100% 100%;
- }
- table{
- padding:;
- margin:0 auto;
- font-size: 16px;
- font-weight: bold;
- line-height: 1.4em;
- font-style: normal;
- border-collapse:separate;
- }
- table th{
- padding:12px;
- border:1px solid #93CE37;
- border-bottom:3px solid #9ED929;
- font-size:20px;
- }
- td{
- background: #fff;
- font-size:14px;
- font-family: "微软雅黑",sans-serif;
- color: black;
- padding:8px;
- text-align:left;
- border: .5px solid #E7EFE0;
- border-radius:2px;
- text-shadow:1px 1px 1px #fff;
- }
- .button {
- background-color: #6fcf6f;
- border: none;
- border-radius: .25em;
- color: #444;
- cursor: pointer;
- display: inline-block;
- font-family: "微软雅黑",sans-serif;
- font-size: 1.25em;
- font-weight: bold;
- line-height: 1.5;
- margin: 0 -21.5em 5em;
- padding: .5em .3em .5em;
- position: relative;
- text-decoration: none;
- vertical-align: middle;
- }
- .button:hover {
- outline: none;
- }
- h1 {
- background-color: #333;
- color: #fff0f5;
- font-size: 3em;
- font-weight: bold;
- line-height:;
- margin:;
- padding: 0.5em;
- text-align: center;
- }
- .attribution {
- color: #888;
- margin-top: 1em;
- text-align: right;
- width: 100%;
- }
QTP关于AOM的Javascript启动方式的更多相关文章
- Redis的三种启动方式
转载:http://www.tuicool.com/articles/aQbQ3u Part I. 直接启动 下载 官网下载 安装 tar zxvf redis-2.8.9.tar.gz cd red ...
- spring有三种启动方式
spring有三种启动方式,使用ContextLoaderServlet,ContextLoaderListener和ContextLoaderPlugIn spring3.0及以后版本中已经删除Co ...
- android service两种启动方式
android service的启动方式有以下两种: 1.Context.startService()方式启动,生命周期如下所示,启动时,startService->onCreate()-> ...
- Redis的三种启动方式【转】
Part I. 直接启动 下载 官网下载 安装 tar zxvf redis-2.8.9.tar.gz cd redis-2.8.9 #直接make 编译 make #可使用root用户执行`make ...
- android activity的启动方式
1.Standard正常启动,默认的启动方式,没什么说头 2.SingleTop 意思就是在栈顶只能存在一个相同的activity 不能叠加,如果再A上继续启动A的话,只会调用A的onNewInten ...
- android服务之启动方式
服务有两种启动方式 通过startService方法来启动 通过bindService来开启服务 布局文件 在布局文件中我们定义了四个按键来测试这两种方式来开启服务的不同 <?xml versi ...
- Android service介绍和启动方式
1.Android service的作用: service通常是用来处理一些耗时操作,或后台执行不提供用户交互界面的操作,例如:下载.播放音乐. 2.Android service的生命周期: ser ...
- 第一章 Mybtais的两种启动方式
Mybatis的两种启动方式如下: 1.xml实现: xml的实现方式中,主要是通过手动创建SqlSession,然后调用session.selectOne()方法实现来实现. 首先是创建Config ...
- mysql 4种启动方式
mysql 4种启动方式 都是去调用mysqld文件 1. mysqld 启动 进入mysqld文件所在目录(/../libexec/mysqld) ./mysqld --defaults-file= ...
随机推荐
- Uncaught SecurityError: Failed to execute 'toDataURL' on 'HTMLCanvasElement': Tainted canvases may not be exported.
canvas绘制图片,由于浏览器的安全考虑,如果在使用canvas绘图的过程中,使用到了外域的图片资源,那么在toDataURL()时会抛出安全异常: Uncaught SecurityError: ...
- 【转】Windows环境下.NET 操作Oracle问题
目前,Windows操作系统可以分成两类,32位和64位(64位也区分x86_64位和Itanium ),同时Oracle客户端也做了同样的区分. 在安装和开发的过程中,经常会遇到一些问题,本文就总结 ...
- oracle模糊查询效率可这样提高
1.使用两边加'%'号的查询,oracle是不通过索引的,所以查询效率很低. 例如:select count(*) from lui_user_base t where t.user_name lik ...
- 十六、C# 常用集合类及构建自定义集合(使用迭代器)
常用集合类及构建自定义集合 1.更多集合接口:IList<T>.IDictionary<TKey,TValue>.IComparable<T>.ICollectio ...
- Linux nohup命令详解
nohup命令及其输出文件 ...
- Java学习----HashMap原理
1.HashMap的数据结构 数组的特点是:寻址容易,插入和删除困难:而链表的特点是:寻址困难,插入和删除容易.那么我们能不能综合两者的特性,做出一种寻址容易,插入删除也容易的数据结构?答案是肯定的, ...
- [转]jQuery,javascript获得网页的高度和宽度
网页可见区域宽: document.body.clientWidth网页可见区域高: document.body.clientHeight网页可见区域宽: document.body.offsetWi ...
- JavaScript 继承机制小记
读<JavaScript: the good parts>, 关于对象继承这块小记一笔: function Base(v){ this.baseValue = v; this.getBas ...
- springMVC整合jedis+redis,以注解形式使用
前两天写过 springMVC+memcached 的整合,我从这个基础上改造一下,把redis和springmvc整合到一起. 和memcached一样,redis也有java专用的客户端,官网推荐 ...
- devicePixelRatio
devicePixelRatio window.devicePixelRatio是设备上物理像素和逻辑像素的比例.公式表示就是:window.devicePixelRatio = 物理像素 / 逻辑像 ...