qtp脚本及对象简单解析

 

概述

最近一段时间,负责调试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.如果一个元素不能识别,则增加其作为标识的属性即可

img1.jpg

实战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属性等

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值