注:原文最早是发表在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
返回目录:http://blog.csdn.net/womengdoushizhongguo/article/details/7769936

WEB-QTP随想录—李密的猜想相关推荐

  1. 测鬼记(中)之奋斗——圈子

    返回深圳又过了几个月,文字完成了几个项目的自动化测试程序的开发工作,整个研发项目的节奏又慢了下来,寥寥无事,日子便就被慢慢消磨了,强烈学习和研究的意志力也下降了很多,心里也就看轻了这份技术许多. &q ...

  2. Android Studio 使用jdbc远程连接阿里云主机web数据库(逃坑)

    Android Studio 使用jdbc远程连接阿里云主机web数据库(逃坑) Tip1:主线程不能访问网络需要再写一个线程,访问web数据库. Test 1 : 接下来开始配置一些东西: < ...

  3. 云原生安全之RASP技术(应用运行时自我保护)

    文章目录 一.背景 1. WAF和RASP 2. waf和rasp是非此即彼的吗? 二.RASP技术(应用运行时自我保护) 1. 应用安全测试SAST.IAST.DAST 和 RASP区别 SAST, ...

  4. RASP技术进阶系列(一):与WAF的“相爱相杀”

    用什么来保护Web应用的安全?猜想大部分安全从业者都会回答:"WAF(Web Application Firewall, 应用程序防火墙)."不过RASP(Runtime Appl ...

  5. Ruby on Rails 的秘笈是什么?

    Ruby on Rails 的秘笈是什么? 我们能从 Rails 框架学到的经验 文档选项 将此页作为电子邮件发送 级别: 初级 Bruce Tate ([email]bruce.tate@j2lif ...

  6. Ruby on Rails的核心特性是什么?

    Ruby on Rails好像一直处于争论的风口浪尖.大多数争论的核心是其所宣称的令人惊异的生产力.作者Bruce Tate已经开始理解Rails并不是一个更好的工具,而是一个不同类型的工具.本文研究 ...

  7. 转Ruby on Rails的核心特性是什么

    Ruby on Rails的核心特性是什么?(1) 作者: Bruce Tate 出处:51CTO.com ( 1 ) 砖 ( 0 ) 好 评论 ( 0 ) 条 进入论坛 更新时间:2006-10-1 ...

  8. 转:一个简单的基于WEB的QTP自动化测试框架-SAFFRON

    来源: http://www.itestware.com/ctest/index.php?option=com_content&view=article&id=62:webqtp-sa ...

  9. QTP的那些事--web测试脚本不能录制的解决方法(个人整理未完待续)

    问题起因: 在安装QTP后,正常录制QTP时,不能产生相应的录制脚本,脚本内容为空. 解决方法:QTP在IE中录制脚本是依靠一个叫BHOManager Class的动态链接库来完成的.当这个控件没有被 ...

  10. QTP之web常用对象

    web对象是我做自动化以来最早学习,最早接触的.对现在而言也是最熟悉不过的了,但是为了以后更稳健的前进,对基础的东西搞扎实,相信以后的路会顺畅许多,下边简单汇总下web的常用几类对象: Browser ...

最新文章

  1. python爬取慕课视频-Python爬虫抓取技术的门道
  2. MapReduce 在Shuffle阶段 内存溢出原因分析及处理方法
  3. 时光机穿梭---删除文件
  4. android触摸指纹会触发按键功能,Android P新特性:利用触摸指纹识别器能阻止手机息屏...
  5. 上海事业编制 计算机 待遇怎么样,事业单位情况
  6. 9203 0427 随堂小结
  7. 4.5 面部验证与二分类
  8. Linux命令行技巧
  9. Houdini特效资源如何导入?Houdini工程文件导入教程
  10. python视频网站项目_Python项目04 视频网站数据清洗整理和结论研究
  11. ue4渲染速度太慢_UE4实时渲染,不用合成。第一部完全UE4渲染动画片是这样炼成的~...
  12. Linux实验四:文件的压缩
  13. 现代大学英语精读第二版(第四册)学习笔记(原文及全文翻译)——5B - Could You Live with Less(你可以简朴地生活吗)
  14. 数字万用表性能指标介绍
  15. 什么是取整?有几种取整方式?C语言又是哪种方式?取模取余一样吗?
  16. android vivo 模拟器,逍遥安卓打造VIVO华为魅族OPPO小米联想手游安卓模拟器
  17. python将文件另存为,python读取文件另存为
  18. win10台式机插入耳机检测不出来
  19. 获取post中的请求参数1
  20. Leetcode 905 c#

热门文章

  1. 计算机显示器使用的扫描方式,平板扫描仪怎么用 平板扫描仪使用方法【详解】...
  2. 分享三种在Excel表格中自动求和的方法
  3. Pytorch使用CPU
  4. 域名WHOIS信息隐私保护
  5. cute-cnblogs 自定义博客园样式美化二期来啦~
  6. java 多媒体处理_Java 多媒体处理包 JAVE
  7. 037 《思考,快与慢》听后感
  8. LaTex 论文排版(2): 插入公式 (从MathType公式编辑器导入到LaTex中)
  9. TextView列表页面跳转的简洁写法.
  10. 计算机是什么信号转换为什么信号,模拟信号转化为数字信号的原理是什么