概述
最近一段时间,负责调试QTP不能跑通的一些问题,对一些比较通用的处理办法,作出一些总结。
我们都知道,QTP是可以通过模拟用户操作,然后进行脚本的录制的。但是,他总是不尽如人意,或多或少就会出现问题,其实这些问题中的大部分,都可以通过对脚本的简单调整,来解决,下面就一一详细说明。
QTP中的对象
首先,QTP中的对象,可以分为录制阶段的和识别阶段的。录制时,由相关的录制引擎负责识别,记录对象。识别时,有相应的识别引擎。所以,我们经常会碰到录制的时候可以识别,但是回放的时候,就不能回放的现象,就是因为这里是分开的2个引擎导致。
其次,QTP中的对象,都有其元数据(可以看做编程中类的概念),这些元数据可以在QTP工具的这个位置找到并查看(Tools->Object
Identification).
(1)Enviroment:环境,如html的,或者flex的,或者其他桌面环境
(2)Test Object
classes:环境下相应的元数据,如WebEdit就代表html中的input输入框,而相应的页面中的某个具体的输入框,则为此数据的一个实例(类与实例的关系)
(3)右侧为相应元数据在识别时的属性值,优先级排序为:
Mandatory properties>assistive properties>smart
identification>ordinal identifier.如果一个元素不能识别,则增加其作为标识的属性即可
实战QTP的对象
就像学编程时候的hello world一样,我们在自动化测试的录制时,也以登陆的过程为例,进行录制。简单录制脚本如下:
Browser("新建选项卡").Page("登陆").WebEdit("username").Click
Browser("新建选项卡").Page("登陆").WebEdit("username").Set
"root"
Browser("新建选项卡").Page("登陆").WebEdit("password").Click
Browser("新建选项卡").Page("登陆").WebEdit("password").SetSecure
"4f5db9bf846984f5bc56bf49"
Browser("新建选项卡").Page("登陆").Link("登录").Click
其中:
(1)
Browser("新建选项卡")和Page("登陆")和WebEdit("username"),都是相应的类的实例,最后的Click为WebEdit的方法(ps:这里插一句,内置对象的方法,可以扩展,这里需要大家自己去探究,这里不详解)
(2) 第二行的set “root”,也为调用set方法,而root为set的参数,这里也可以写为Set(“root”),空格为一种简便写法,同时,当方法必须传值时,必须为括号的方法调用格式
实际问题1:机构用户管理的机构树,点击+号不能录制
问题描述:
在实际录制中,发现机构用户管理下的机构用户树,点击+号展开用户的操作,无法录制,不能识别这个动作
问题解决:
(1)使用object spy,发现该对象可以识别,但是录制时,就是不能产生对应的脚本。进一步测试,发现+号右边的文件夹图标可以点击,决定使用脚本来试一下。在QTP中,点击工具条的这个图标,然后点击添加对象,添加相应的+号位置对象到对象库中,并且在脚本中加入如下语句:
Browser("XX数据平台").Page("XX数据平台").Frame("leftTree").WebElement("WebElement_2").Click
其中WebElement_2为刚才添加的对象的名字。
进行完以上以后,我们点击run
,测试下刚才的修改。测试后会发现,+号能被点击,但是识别过程很慢,原因是启动了QTP的智能识别,会导致对象识别时间加长,这显然不是我们想要的,进一步优化这个对象的识别过程。
(2) 首先来分析下,为什么对象不能被立即识别,而非得启动智能识别。首先,QTP对对象的识别,是一种称之为描述性编程(description
programing)的东西,它根据对象的属性描述,来进行对象的甄别。有了这个知识,我们就继续往下分析,我们点击打开对象库面板,点击WebElement_2元素,其对象图如下,在右侧的Test Object details下面是这个对象的所有要被识别的属性,我们发现,其重要属性(description
properties),下面只有2个值,这2个值在页面进行匹配时,有点儿过于模糊,所以根本无法对对象进行寻找,只有交给优先级稍低的智能识别,那么我们怎么来解决呢
在我们之前提到的元数据中,找到webelement,点击右边Mandatory
properties下面的add/remove按钮,添加一个他的属性class,然后我们再重新识别+号,并修改脚本中,此次识别到的对象名称,然后再测试,发现这次一下就识别到了,收工
实际问题2:能录制,但是回放时报对象找不到之类的错误
问题描述:
录制新建数据集->简单SQL时,有个选取模式和表名的过程,这里用的通用组件的下拉列表,录制时没有问题,动作都可以识别,但是回放时,会报下拉列表中的选项对象找不到
问题解决:
首先要明确,录制可以识别,回放找不到时,那么90%是因为录制时,对象的信息不够全,可以通过给对象添加更明确的属性,来让QTP回放引擎,快速寻找对象。本例不通过此办法,而通过另一个,更应该学会的办法来解决这个问题—通过元素的id属性,唯一确定元素。
脚本如下
Browser("新建数据集").Page("无标题文档").Frame("11").WebElement("html
id:=rqdataDiv_schema_全部").Click
其中的 WebElement("html
id:=rqdataDiv_schema_全部")的含义为找到id为rqdataDiv_schema_全部的webelement元素(span或者div),那么,只要在页面知道的元素的id,就可以在QTP中直接定位元素,非常方便
开发与测试的配合,开发可测试的应用程序
通过以上问题的分析,我们发现,QTP脚本的录制,与开发出来的程序的可测试性,密切相关,所以,在开发过程中,应该积极与测试相配合,开发具有高可测试性的程序,其中以下几点需重点对待
(1) 使用W3C的标准标签,以便在QTP的对象库中能够找到其原型
(2) 重要的页面元素,必须有自己的唯一标识,例如加ID属性,title属性,name属性等
分享到:
相关推荐
QTP脚本编辑器,可以在调试QTP脚本时使用,帮助查QTP脚本的问题
QTP一些脚本。 对初学者建议下载。应该很有用处。
QTP脚本规范,刘述了QTP写脚本时的规范,大家可以参考看看!
通过自定义对象来操作一些QTP录制脚本无法驱动的对象。
QTP对象库简介
Windows计算器加法添加标准检查点QTP脚本
QTP脚本录制回放
QTP脚本还可以这样写 录制测试人员的操作过程,再回放出来并多次运行,达到使用机器代替人来执行测试的效果
几个 QTP 脚本实例。 对初学者必定有用。
qtp脚本语言VBScript资料,Vbs脚本编程简明教程和工具,希望对大家有用。 VBScript.chm,点击该文件右键属性,解除锁定就ok了
怎样使用脚本启动QTP应用,并打开一个新的测试
QTP是quicktest Professional的简称,是一种自动测试工具。使用QTP的目的是想用它来执行重复的手动测试,主要是用于回归测试和测试同一软件的新版本
回放模式设置,1为事件模式,2为鼠标模式 Setting.WebPackage("ReplayType") = 2 ''描述多个属性的语法 fatherObject.Link("micclass:=Link","text:=click me").click
从经验中学习很多东西,帮助零基础学者少走弯路,
QTP_VBS脚本
QTP10-插件破解脚本
QTP 文件处理脚本函数 可以直接在QTP中调用,不用再编写了
QTP脚本数据分离管理,一个脚本与数据分离插件
QTP脚本资源及其实例详细讲解