自动化测试专家,专注于自动化测试领域的框架开发及国外最新自动化技术,担任过银行、电子商务等项目的自动化测试工作,精通自动化测试工具QTP、Watir等.并对QTP有过深入的研究,有过企业内训和工具培训经验,希望能与各位同行一起沟通,交流,探讨。 zzxxbb112@hotmail.com

[原]【软件测试自动化-QTP系列讲座 46】== JScript在QTP中的终极探究(二) ==

上一篇 / 下一篇  2012-03-11 13:41:48 / 个人分类:QTP系列讲座

Is8@y`&o6j1zk&f0

.j(xg~h0

作者:zzxxbb112
时间:2011/11/20 版权所有,侵权必究。

ZB+F"@dm#@:vE P c0

出处:http://blog.csdn.net/zzxxbb11251Testing软件测试网4?9lU_5I2[

51Testing软件测试网U0bU!}2Dj3b

~'b*C6ap7Nk0 上一次讲座我们简单介绍了下QTP中如何执行javascript,其实说穿了也就是借助QTP的封装方法来进行执行javascript,主要还是想照顾下新手所以简单介绍一下这块内容,可能对一些测试高手们来说不值一提,但是今天这次讲座相信一定会让你眼前一亮,应该可以说本次课程是领先技术讲座的高潮。擦亮你的眼睛,来看如何真正意义上在QTP编辑器中直接执行JAVASCRIPT,并把try catch应用到实际应用中。从此摆脱vbs那种渣一样的错误捕获。

'V{O(OY u_+_k051Testing软件测试网P1gYN:J

51Testing软件测试网^r/D[#e*lo
51Testing软件测试网c;aGZ)rW%p%}

51Testing软件测试网Sy(P$Xk9n:Q

在这之前请允许我来介绍一个组件,它就是MSHTML组件,我们可以通过这个组件来执行js51Testing软件测试网@9E@xXP,K

3Z"Y6R6@4L,|/d,S0
iD jEf0

tu4|Hm u,H051Testing软件测试网LU:ZV$i ^*J P

Javascript执行脚本51Testing软件测试网|(R w;S_2~h-b,u

51Testing软件测试网j!Y.@c["a#I7Jn6U

Set HTML = CreateObject("htmlfile")
Set Js = oHTML.parentWindow
Js.execScript. "alert('test')"

8x'z O M4K4R9d0分析:通过以上脚本我们可以非常轻松的执行javascript,执行结果会直接弹出test文本框。51Testing软件测试网kN}fqS8M^4q

}u:OF&`,t-?Ch;~3U0结果:

&vz2Ad&R`J051Testing软件测试网V|0wn9R3\.x&u*`

51Testing软件测试网]V}J }Xg
51Testing软件测试网|K%gr;_c-zB \

51Testing软件测试网$m gP O*ks

51Testing软件测试网} ^)S`5}

Gf q4|o0

9fes3ld B\e0那么我们是否可以在QTP中执行以下代码呢?

RX*w+t.N @0

_Ys3k5ynx K&}8t0

Set HTML = CreateObject("htmlfile")
Set Js = oHTML.parentWindow
Js.execScript. _
"Browser('百度一下,你就知道').Page('百度一下,你就知道').WebEdit('wd').set('iquicktest');"

S6W-AW e5f B-\d0分析:我们现在要做的是通过以上javascript方式来控制QTP的对象模型,因为只有这样才有意义,不是吗?但是当你执行以上代码时,你会发现一件很恼火的事情,QTP直接抛了一个错误:51Testing软件测试网 u x:V j9C`Axz6r

51Testing软件测试网 P!c Wa0D$kXHB I


}qpqx2i4z6`gQ0

o!a {:l+gZ"|'V%Kd0

]bA LSYq{TQz9h0为什么会出现如上图的错误呢,这是因为javascript脚本层与vbscript脚本层是在不同的两个空间之中的,虽然在vbscript脚本层中是可以直接控制Browser对象的,但是到了javascript中这个对象却是空的,根本没有这个对象存在,因此执行后回抛错,那么现在的问题是我们如何把vbscript脚本层中的测试对象模型直接传递到javascript脚本层呢,这就需要进行穿越了,只有空间扭曲才可以做到,呵呵,开个玩笑,其实很简单,来看以下脚本:

j'@ Cp}051Testing软件测试网#h+P*VB5M)F

51Testing软件测试网,| D:l7^(o2kik

bCF'J2uG051Testing软件测试网7I9c$l2q p

QTP中任意对象的穿越

Cv s+x3U-|0t u4Z0

nT'_9N1Dh0

Set HTML = CreateObject("htmlfile")
Set Js = oHTML.parentWindow

'声明Browser对象
Js.execScript. "var Browser;"
'把Browser对象层
Set Js.Browser = Browser
Js.execScript. _
"Browser('百度一下,你就知道').Page('百度一下,你就知道').WebEdit('wd').set('iquicktest');"

M'g"W E\P8j2s0分析:执行以上脚本后,你会发现iquicktest被成功输入到百度文本框中了(别忘了先把对象都添加到对象库,这个我就不解释了),别急,还没玩,这才只是一个小小的开始,还有很多重量级的没有上台,怎么能就这样结束了呢。那么我在本文开头也说了,要让QTP真正意义上的执行javascript,那么现在就开始进入到我们的高潮部分。可能对于一些高手们我相信你应该已经想到我接下来需要怎么做了,来看下一段脚本。51Testing软件测试网M"q j[/n8bOg

K(wh2aV4h7W8`0
*j#M_^#y051Testing软件测试网&w H;T|X tZi-_x

BS |tj^)~0

On error resume next
Call InitJSEngine

Function InitJSEngine()
        '创建htmlfile组件
	Set HTML = createobject("htmlfile")
	'通过GetObject拿到qtp自动化模型实例
	Set qtapp = getobject("","quicktest.application")
	'定义js,以及一些需要穿越的对象
	set JS = oHTML.parentWindow
	js.execScript. "var Browser,Setting,Print;"
	set Js.Browser = Browser
	Set Js.Print = Print
	Set js.Setting = Setting

	'获取到QTPACTION1中的脚本内容并执行
	 js.execScript. qtapp.Test.Actions("Action1").GetScript.
End Function

g3D'n_c-e z+sK%A0分析:以上脚本中我们主要定义了一个函数,这个函数其实很简单,js执行部分其实和之前讲一样,主要是笔者通过aom方式把qtp脚本编辑器中的脚本内容直接捕获下来并通过js的方式执行,这一点对于熟悉aom的朋友应该很容易就能想到。那么把此文件命名为Js.qfl放入到Resources中:

Z.Q|2h*R"K G+p-I051Testing软件测试网5r3AtI-O*[T,a


q Kw z2zf8T8j0

x4K,PEn:Y5Fk051Testing软件测试网.RR\en9h }


{5N6n l*t0M)T8t051Testing软件测试网2JDPx6l

51Testing软件测试网%m_H,p.SfnT

接着我们直接在QTP脚本编辑器中输入javascript脚本:

h3T k O]:}7e a0

)KO-Ut'[3P&c#Cku0

function testflow()
{
	var p = Browser("百度一下,你就知道").Page("百度一下,你就知道");
	p.WebEdit("wd").Set("iquicktest");
	p.WebButton("百度一下").Click();
}

testflow();

6@M/l7M#tO/HYsu051Testing软件测试网 V n'n6\!HT

A0F+| J%l$NW?0效果图:51Testing软件测试网*R-c6}uX[Eph

]?.p [Ju9DCp0
w5U,t }lRx%R0

.l:}jHHP:z051Testing软件测试网O"Xjp{7?


N9_ S6A.hF9Ob9m'O0

U sIm/@9z9n051Testing软件测试网#h Q$Z`s5wjj

那么接下来如果直接执行脚本,QTP会首先去验证脚本是不是符合vbs语法,如果出错会弹出错误框,导致执行中断:

t7x kX Rd7m#W JM051Testing软件测试网0P,qn;D\F)_

51Testing软件测试网r.vo,~(m(w/Y

Dp%EbXy0

N(md?A`yZh0如图,QTP报错说存在无效字符串,因此我们需要把这类错误处理框进行过滤。51Testing软件测试网~QEV \,n:n)e

51Testing软件测试网2bIn!P#gw2?_

进入Test Settings后,选择run选项51Testing软件测试网u5k qQ3J Vs1yX

V3C"G4^5p0
Z+@~#O @5[J051Testing软件测试网5q-h/P1F6C-_

51Testing软件测试网WL;f3m]k"o$J%Cy3F2I

如图,更改When error occurs during run session:选项为Stop Run,为什么这样设置?

}qG&c5{0

~6c!jOy0原因分析:QTP在执行测试脚本的顺序是首先执行Resources中的函数库,接着才开始执行脚本编辑器的。51Testing软件测试网"Eha~#h9u

3@"gB^*e2_i0kvA0改写完毕之后,再次执行脚本,此时你会惊奇的发现,可以成功在QTP编辑器中直接执行javascript吧。嘿嘿,别急,还没完!!

}/c.`.K1j?nn,h0

fWk$S,e1M&{-t051Testing软件测试网cE6tY5zS,H

IRU*I[e5r%~ ]v0

*Ga)]F:O0|j9R8Y0高潮怎么可以这么快就结束了呢,try catch还没有登场,这可是最最重量级的,脚本如下:

*MP)M%AMn0

4H#Ml1`J-id h0

function testflow()
{
	//设置超时时间为100
	Setting.Item("DefaultTimeOut") = 100;
	Print ("********************* Javascript. in QTP - Report ********************* ");

		//使用try catch语句对QTP脚本进行错误处理
		try{
			var p = Browser("百度一下,你就知道").
			Page("百度一下,你就知道");
			p.WebEdit("wd").Set("iquicktest");
			p.WebButton("百度一下").Click();
	   }
	   catch(err)
	   {
		  Print("错误提示: " + err.description);
	   }
	   finally
	   {
		  Print("搜索模块执行完毕");
	   }
	Print ("********************* Javascript. in QTP - Report ********************* ");
}

testflow();

a3D Xj.R3D0在QTP中的效果图:

!zWW\wX:Ha0

o$`}8k5I0
0P"SXfBA.?0

p4t5}7ht@LUJ#?0

w wI!`0h v0分析:为了尝试下try catch功能是否正常,我们可以把浏览器打开到其他页面,这样脚本就找不到百度搜索框对象,即会出错。

&Yx"d"czpX$G0

'hk[+u$a*` ]0执行结果:51Testing软件测试网U&gI @:{uK

g'my+h'R(u8z051Testing软件测试网\lp.d b$~ B X1S

;b%nBt1M#e0

.ed7QU&s5N0
$Gs.G4VU[1{0

q"OhD8S K-a0

u4r(P+dx'xPs0总结:

mV,`NpC ?051Testing软件测试网v*QUG*j

好了,这一讲的内容就结束了,对于jscript的研究讲座就已经完成了,对于使用javascript来直接编写测试脚本还有更多的应用价值等待我们去发现和挖掘,如果大家有什么兴趣和想法也可以在评论中提出,最后希望大家能够喜欢本次讲座,这可是哥花了我周末两个小时才写完的,不过还是那句话,任何东西只有分享才有价值^_^。

Vs|BYT2A/]P^0

&e7i7Wa5I0].K6`U0
^{)C#cR x0

5U;Mj i3WRxx051Testing软件测试网Z fH3]D9D%V

 Rss订阅IQuickTest关于如何订阅?
0jvz`:A5C[5p*I0

-_(r;b7wBj0
作者:zzxxbb112 发表于2011-11-20 13:54:43 原文链接
阅读:1107 评论:7 查看评论
51Testing软件测试网(gM!c:A6JE4Vn)P/A

*I3{(@M(eCn9g0Link URL: http://blog.csdn.net/zzxxbb112/article/details/6992854

TAG:

 

评分:0

我来说两句

我的栏目

日历

« 2024-04-22  
 123456
78910111213
14151617181920
21222324252627
282930    

数据统计

  • 访问量: 32345
  • 日志数: 49
  • 建立时间: 2009-10-17
  • 更新时间: 2011-10-31

RSS订阅

Open Toolbar