WEB-QTP随想录—李密的猜想

注:原文最早是发表在www.automationqa.com上面的,后来因为网站被黑而文章内容消失了,希望csdn别被黑了。

关于转载:本文为原创文章,欢迎转载,但转载需要标注出处以及保证内容的完整性,请理解写作的寂莫和苦处。

关于版权:本文不得应用于以赢利为目的的任何场景,否则本人保留相应的权利。

不知道您昨晚学会清蒸豆豉鱼这道菜,如果你学会了,不仅证明你非常的有口福,同时也说明了你是一个爱动手有实干精神的人,更说明了你肯定是一个能学会使用QTP的人,因为做菜是生活必需的,而QTP不是。今晚就不谈做菜了,还是说说刚看的电影吧!老婆说《李密的猜想》中的王宝强被骗的好惨。是啊,每年世界上又有多少个《李密的猜想》中的王宝强呢?我可亲可爱的农民同胞们又有多少每天为了生存,虽然悲屈但仍坚强地《活着》呢!做为一个所谓农民或农民工的儿子,我想起了过去,尤其是那双漏水的鞋,坑脏的厨房,每天14个小时工作,还有我那些在小面馆中工作的阿姨们,还有资本家们给予700百元的现实。

  社会是如此的疯狂,人生是如此的无耐,我期待有一个圣人,伟大的圣人啊,带领我们进入真实的乌托邦!

  最近废话和过去想做作家的梦一样多,一样的天真,真是糟糕,还是开始今天的课题吧!使用QTP也有一段时间了,每当我被QTP折磨得够呛时,我就常常在想,我能不能自己写了一个类似的程序呢,抛弃它使用我的原理,于是狂揽群书而快速地观之后惊奇的发现也许QTP Web的实现原理也大抵如此。请注意,本文完全是一种猜想,是否正确,留给上帝判明吧!

  好吧,就让我们对QTP的内部实现细节进行猜想吧。

  我们都知道,IE也罢FireFox也罢,他们都是基于HTML前端代码访问服务器,服务器处理后再次返回到前端页面的。不知大家注意过没有,使用FireFox时,选中某个区域后,可以查看这个区域内的源代码,提交数据后,再查看时,源代码又重新下载了一部分。使用过类似于firebug的人应该知道,当我们将firebug中的小箭头指向页面中的某个元素然后点击的时候,firebug就会将这个区域的相关代码给显示出来(这是如何做到的,目前还不清楚)。

  于是,我们可以这样猜测QTP web的内部实现细则,开启录制时,程序即开始监听,当我们点击某个页面元素时,QTP就像firebug一样,下载了这个区域的前端代码,然后根据这段代码的标签按照QTP的设定方式进行分类并可能给它分配了一个编号,而这个标签中的其它信息,就按照标签所有的常用属性名称将它存储在仓库对象之中,至于你使用的方法就可能是监听你的键盘操作或者鼠标操作,然后按照你指定区域的标签的类型,记录方法,至于此标签所处的Browser或Page(Frame)或WebTable则根据HTML DOM结构可以分析出来。

  如果你赞同上面的猜想,也许就可以理解,为什么QTP录制的时候,输入框是必需进行更变输入,否则无法录制的原因。

  如果你赞同上面的猜想,也许我们就可以解释,为什么QTP录制日期控件时,总是回放失败,而认为是一个WebTable对象,因为它认为了日期控件是属于当前Page的(Frame实际上是一个Page),而实在不然(具体以后会讲到怎么处理日期控件,以及怎么实现完全模拟人工操作的日期控件的问题)。

  如果你赞同上面的猜想的话,也许我们可以建立一个表,使HTML的标签与QTP的Web对象建立起对应关系。
Html 标签
QTP 对象
<html>
Page
<a />
Link
<Link/>
Link
<area />
WebArea
<button />
Button
<div />
WebElement
<form />
WebElement
<frame />
Frame
<frameset />
Frame
<iframe />
Frame
<img />
Image
<input type=button/>
WebButton
<input type=checkbox/>
WebCheckBox
<input type=file/>
WebFile
<input type=image/>
Image
<input type=password/>
WebEdit
<input type=radio/>
WebRadioGroup
<input type=reset/>
Button
<input type=submit/>
Button
<input type=text/>
WebEdit
<label />
WebElement
<option />
WebElement
<p />
WebElement
<select />
WebList
<span />
WebElement
<table />
WebTable
<tbody />
WebElement
<td />
WebElement
<textarea />
WebEdit
<tr />
WebElement


  如果你赞同上表的猜想的话,我们可以从上面的表中得知QTP把不少对象都认成了WebElement,那么也许我们可以在某些时候这样使用Browser().Page().WebElement(这里是一个层).WebEdit().set XX,从而解决QTP某些时候的对象认识的层次问题。曾经我在QTP提供的帮助文档里看到说WebElement可以供所有Web对象使用,当时我还认真的去调试了一下,发现运行后现象如下(当然也可能是我理解错误)。

  所以如果说,WebElement对象如表中对应关系的话,我还相信,但是如参考文档所述,就不敢苟同了。

  如果你赞同上表的猜想的话,也许我们就可以解释为什么有时某个对象页面中明明没有,而程序判断出的结果却用。这时,你只需要到页面源代码中寻找,往往来说不是这个对象被隐藏了,就是边框为0。

  如果你赞同上面的猜想的话,也许我们就可以理解,为什么有时候用描述性编程时,在回放过程中,QTP报对象重复的提示语。因为它们在前端代码中的源码是一样的。

  所以,如果你下次遇到QTP回放时报错的话,不妨试一试看看他的源代码,分析分析也许问题就在不轻意间解决了。当然,如果你不认识HTML代码或者不会使用firebug等类似软件,我上面的话全当白说。

  文青山
  2011-4-1
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

那美那美

失业了,写文章求吃碗炒面

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值