QTP交流及学习笔记.docx

上传人:b****4 文档编号:26957266 上传时间:2023-06-24 格式:DOCX 页数:23 大小:150.01KB
下载 相关 举报
QTP交流及学习笔记.docx_第1页
第1页 / 共23页
QTP交流及学习笔记.docx_第2页
第2页 / 共23页
QTP交流及学习笔记.docx_第3页
第3页 / 共23页
QTP交流及学习笔记.docx_第4页
第4页 / 共23页
QTP交流及学习笔记.docx_第5页
第5页 / 共23页
点击查看更多>>
下载资源
资源描述

QTP交流及学习笔记.docx

《QTP交流及学习笔记.docx》由会员分享,可在线阅读,更多相关《QTP交流及学习笔记.docx(23页珍藏版)》请在冰豆网上搜索。

QTP交流及学习笔记.docx

QTP交流及学习笔记

1.对象库及对象识别1

1.1.对象的添加1

1.2.代码中对对象的描述3

1.3.一些对象无法识别情况的处理3

1.3.1.对象不存在3

1.3.2.对象加载超时3

1.3.3.对象的属性值与Run-time对象的属性值不一致4

1.3.4.父对象无法识别4

1.3.5.对象不唯一5

1.3.6.对象item不能识别5

1.3.7.对象item不唯一6

2.描述性编程6

3.QTP学习笔记8

3.1.登录页面验证码的处理8

3.2.日期控件的处理8

3.3.银行密码加密控件的处理8

3.4.随机数的使用9

3.5.四个取/赋值对象属性方法的区别9

3.6.多条数据记录录入的脚本例子10

3.7.QTP取字符串方法11

3.8.QTP调用外部函数的方法12

3.9.数组和ReDim12

3.10.Creationtime属性12

3.11.QTP连接数据库实例13

3.12.DataTable的使用17

3.13.通过字体颜色、字号和type来进行判定17

 

对象的添加

在菜单中选择Resources\ObjectRepository或者使用快捷键Ctrl+R打开对象库,选择Object\AddObjecttoLocal或者点击

按钮,然后点击需要添加的对象,QTP会自动读取该对象的属性,以便识别。

如下图所示:

可以看到我们添加的是一个WebEdit对象,Browser和Page是它的父对象,当选择非叶子节点进行添加时,可以有选择的添加对象;

TIP:

如果选择叶子节点的对象进行添加时,QTP只会添加识别该对象所必需的父节点,例如我们只添加WebEdit,那么QTP会自动将Browser、Page和两个WebTable添加,并不会添加WebTable或是Page下的其他对象。

另外,QTP在录制脚本时,会将脚本涉及到的对象,自动添加到对象库中,但是自动添加的对象属性并不是每次都能识别,而且QTP会自动添加一堆没用的对象,所以不建议使用录制的方式进行脚本的编写

1.1.代码中对对象的描述

以下是在QTP脚本中对对象及对象方法及参数的描述规则;(以下代码为在SP门户下输入用户名“00000001”,输入密码,输入验证码“YXWB”,点击登录按钮)

Browser("中国航信综合业务分销平台").Page("中国航信综合业务分销平台").WebEdit("txtUserName").Set"00000001"

Browser("中国航信综合业务分销平台").Page("中国航信综合业务分销平台").WebEdit("txtSPPwd").SetSecure"4bbbe9103f28526cf3d6252a25dbeb0ad8bd"

Browser("中国航信综合业务分销平台").Page("中国航信综合业务分销平台").WebEdit("validator").Set"YXWB"

Browser("中国航信综合业务分销平台").Page("中国航信综合业务分销平台").Image("imgLogin").Click30,11

1.2.一些对象无法识别情况的处理

一般来说,对象无法识别分为以下几种情况

1.2.1.对象不存在

如果对象已经不再在被测程序中存在,则应在脚本中修改或删除相关步骤。

1.2.2.对象加载超时

1、对于Web对象,增加BrowserNavigationTimeout(File>Setting>Web页签)时间。

2、在包括该对象的步骤前使用Wait语句,让QTP在执行该步骤之前等待一段时间。

1.2.3.对象的属性值与Run-time对象的属性值不一致

根据以下的步骤比较测试对象与Run-time对象的属性值:

1、进入ObecjtRepository窗口(Resources>ObjectRepository),选择对象。

2、记录对象的class以及它的各个属性及属性值。

3、打开被测程序,并打开包含被测对象的页面或窗口。

4、在QTP中选择菜单Tools>ObjectSpy或点击ObjectSpy按钮,打开ObjectSpy对话框。

5、选择“TestObjectProperties”选项。

6、点击右上角的按钮(带有手图标的),这时QTP窗口以及ObjectSpy对话框都被最小化。

7、在程序页面(或窗口)中点击目标对象,恢复ObjectSpy对话框,并在对话框中显示对象及其父对象(以树的形式显示),并在Properties页签中显示当前对象的属性及属性值。

8、这时ObjectSpy对话框的Properties页签中显示Run-time对象的所有属性,在此查看对象的class,以及它的属性及属性值,并将它与第2步中记下的内容进行比较。

1.2.4.父对象无法识别

对象的识别还与它所继承的父对象有关。

如果你能在被测程序中看到对象,而且程序中对象的属性值与仓库中对象的属性值也是一致的,但仍然遭遇到了“Cannotidentifyobject”错误,则这个错误可能与它的父对象有关(如仓库中父对象的属性值与程序中父对象的属性值不一致),也可能是仓库中的对象与程序中对象的继承关系不相同导致的。

要判断是继承关系中的哪个父对象出现了问题,请尝试下面的方法之一:

1、重新录制对象,比较新旧对象的父对象。

2、对继承关系中的每个父对象,分别插入一个Exist语句,并运行该部分脚本。

一旦找到了存在问题的父对象,接下来偿试以下方法:

1、修复存在问题的父对象的描述。

方法见1.4。

2、在专家视图的模式下,查找所有继承存在问题的实例并进行修正

1.2.5.对象不唯一

查看当前对象的描述,并尝试在程序中找到其它具有相同描述的对象并查看它们的描述。

1、如果你找到了可以将它们区别开来的一个或多个属性,则修改仓库中对象的相关属性(如向描述中添加属性等),以使QTP在运行时可以唯一识别它。

2、如果它们的识别属性完全相同,则在对象描述中为对象添加一个ordinalidentifier(index或location)。

1.2.6.对象item不能识别

QTP不能识别方法参数中指定的列表或树对象的item时,请确认指定的item是否存在于对象之中。

1、如果item不存在,则删除相关脚本步骤,或修改item。

2、如果item存在,但被测程序中它的名字发生了改变,则修改item的名称,或在脚本中使用item的index而不是名字(如“#4”)。

注意,不同的对象或方法,它们使用index的语法可能不同。

1.2.7.对象item不唯一

在列表或树对象中,可能有多个名字相同的item。

在这种情况下,可以指定item使用index(例如“#4”)。

2.描述性编程

QTP的对象库使得自动化测试脚本变的更加简单,当然依赖性也更强,在实际工作中,对象的属性不会是一成不变的,版本的变更、缺陷的修改、需求的变更,都会导致对象相应的属性变更,如果脚本过分依赖对象库,当被测试系统比较庞大时,对象库的维护工作将变得非常困难,脚本移植性也会变的很差。

其实,在QTP脚本中,不使用对象库或对象名称,也可以对被测程序中的对象进行操作。

为了做到这一点,我们需要在QTP脚本中提供对象的属性及其值的列表。

这就是编程性描述。

当对象不存在于对象仓库之中,而我们又希望操作该对象时,编程性描述就非常有用。

如果有多个对象,它们具有某些相同的属性,通过编程性描述,我们可以在这些对象上进行相同的操作;或者某个对象的属性无法确定,需要在运行过程中指定,我们也可以使用编程性描述,来对该对象进行操作。

编程性描述的方法有两种:

方法一:

在语句中直接列出对象的属性及值的列表;

方法二:

使用Description对象,为Description对象添加属性及值的集合,然后在语句中直接使用Description对象的名称即可。

使用第一种方法要简单一些,但是在很多情况下,第二种方法更显得功能强大并更有效率。

通常语法如下:

TestObject(“PropertyName1:

=PropertyValue1”,“…”,“PropertyNameX:

=PropertyValueX”)

TestObject:

指的是测试对象的类名

PropertyName:

=PropertyValue:

指的是测试对象的属性及值。

每对property:

=value用双引号标记,并用逗号隔开。

例如:

Browser("中国航信综合业务分销平台").Page("中国航信综合业务分销平台").WebEdit("htmlid:

=txtUserName").Set"00000001"

这里我们用了htmlid作为描述WebEdit的属性,QTP会先找到WebEdit对象,然后匹配htmlid属性是txtUserName的WebEdit来进行.set的操作。

如果需要描述属性的对象比较多或者有单个对象要多次使用,结合方法二我们可以把脚本修改为这样

SetDescBrowser=Description.Create()

DescBrowser("name").value="中国航信综合业务分销平台"

SetDescPage=Description.Create()

DescPage("title").value="中国航信综合业务分销平台"

WithBrowser(DescBrowser).Page(DescPage)

.WebEdit("htmlid:

=txtUserName").Set"00000001"

.WebEdit("htmlid:

=txtSPPwd").Set"111111"

.WebEdit("htmlid:

=validator").Set“YXWB”

.Image("htmlid:

=imgLogin").Click

EndWith

如果页面中存在多个name是txtUserName的WebEdit,可以在描述性脚本中增加index属性对对象进行描述,例如

WithBrowser(DescBrowser).Page(DescPage)

.WebEdit("htmlid:

=txtUserName",”index:

=0”).Set"00000001"

.WebEdit("htmlid:

=txtUserName",”index:

=1”).Set"00000002"

.WebEdit("htmlid:

=txtUserName",”index:

=2”).Set"00000003"

EndWith

3.QTP学习笔记

3.1.登录页面验证码的处理

登录页面的验证码是Image对象,没办法通过GetROProperty方法取出验证码,目前没有很好的解决方法,只能通过增加一个输入参数的方式去跳过验证,实例代码如下:

Input=Inputbox("输入验证码")

Browser(DescBrowser).Page(DescPage).WebEdit("htmlid:

=validator").Setinput

3.2.日期控件的处理

多数日期控件都很难被QTP识别,而且识别了也很难按照要求去选择日期,针对日期控件,可以使用.Object.setAttribute方法直接写入“value”值,跳过日期控件,实例代码如下:

Browser(DescBrowser).Page(DescPage).WebEdit("htmlid:

=txtGoDate").Object.setAttribute"value",date

注:

其中date是QTP的日期函数,返回当前系统日期

一站式中的日期控件格式与date返回格式不符,可使用以下函数对日期格式进行再处理

PublicfunctionDateConvert(iStr)

DimDateArray

DateArray=split(iStr,"-")

Forj=0toUbound(DateArray)

Iflen(DateArray(j))<=1then

DateArray(j)="0"&DateArray(j)

endif

Next

iStr=DateArray(0)&"-"&DateArray

(1)&"-"&DateArray

(2)

DateConvert=iStr

EndFunction

3.3.银行密码加密控件的处理

银行相关的密码控件是加密过的,就算识别成WebEdit也无法使用set方法,航信的系统自动设别时将之识别成WebEdit,后来单独识别又识别成了WinObject,这里的解决方法不推荐使用虚拟对象,直接用WinObject的type方法录入数据即可,实例代码如下:

Browser(DescBrowser).Page(DescPage).WinObject("ATL:

Edit").Type"123456"

3.4.随机数的使用

在测试脚本的编写过程中,经常会经常将一些参数随机化,来增加自动化测试脚本的范围和功效,QTP中的随机函数语法如下

RandomNumber(ParameterNameOrStartNumber[,EndNumber])

适用于随机化的一些情况:

1、ComboBox和CheckBox的index

2、查询结果的页码

3、WebTable的row

4、一些int值

5、一些按钮的index值或者可供随机化的属性值,例如:

Browser(DescBrowser).Page("title:

=航旅天空-AG门户-航班查询结果").image("htmlid:

=iBBB_Flight"&intFlight&"Cabin"&RandomNumber(1,intCabin)).Click

6、利用ASCII码实现字符串的随机化

3.5.四个取/赋值对象属性方法的区别

其实一共有四个相似的方法,分别是:

GetTOPropertys,SetTOProperty,GetTOProperty,GetROProperty

前三者之间的区分还是比较好理解的,主要是最后面两个之间的区分,

1、GetTOProperty是得到现对象库中的已经存在对象的属性值,这个值早就在添加对象的时候就已经定死了,所以对于随着情况不同而会随时改变的属性值,那么就需要用到GetROProperty

2、GetROProperty是得到运行时对象的属性值,如edit控件中的值会随着其它的参数改变而改变,那么这个时候用GetTOProperty来得到对象的中的属性值就不合适了

3.6.多条数据记录录入的脚本例子

一站式旅客信息输入实例

'************************************************************

'变量说明

'PsgNum:

旅客人数

'i:

循环变量

'PsgName:

旅客名字,一维数组

'PsgCode:

旅客证件号码,一维数组

'************************************************************

DimPsgNum,i,PsgName,PsgCode

PsgName=array("aaa/aaa","bbb/bbb","ccc/ccc","ddd/ddd","eee/eee","fff/fff","ggg/ggg","hhh/hhh","iii/iii")'旅客名

PsgCode=array("111111","222222","333333","444444","555555","666666","777777","888888","999999")'旅客证件号码

PsgNum=RandomNumber.Value(1,9)

Browser("航旅天空-AG门户-旅客信息输入").Page("航旅天空-AG门户-旅客信息输入").WebList("htmlid:

=dropPsgNum").SelectPsgNum-1

'循环:

输入旅客信息

Fori=1toPsgNum

Browser("航旅天空-AG门户-旅客信息输入").Page("航旅天空-AG门户-旅客信息输入").Webedit("name:

=txtPsgName"&i).SetPsgName(i-1)

Browser("航旅天空-AG门户-旅客信息输入").Page("航旅天空-AG门户-旅客信息输入").WebList("name:

=selPsgIDType"&i).Select"其它"

Browser("航旅天空-AG门户-旅客信息输入").Page("航旅天空-AG门户-旅客信息输入").Webedit("name:

=txtPsgIDNo"&i).SetPsgCode(i-1)

Next

IfBrowser("航旅天空-AG门户-旅客信息输入").Page("航旅天空-AG门户-旅客信息输入").WebButton("htmlid:

=btnNext").GetROProperty("disabled")=1Then

Reporter.ReportEventmicFail,"【确定】按钮异常,脚本终止","系统提示错误:

”"&Browser("航旅天空-AG门户-旅客信息输入").Page("航旅天空-AG门户-旅客信息输入").WebElement("htmlid:

=lblEx").GetROProperty("innertext")&"“"

ExitRun

Else

Browser("航旅天空-AG门户-旅客信息输入").Page("航旅天空-AG门户-旅客信息输入").WebRadioGroup("name:

=radReceiptDeliveryType").Select"#"&RandomNumber.Value(0,3)

IfInt(Browser("航旅天空-AG门户-旅客信息输入").Page("航旅天空-AG门户-旅客信息输入").WebRadioGroup("name:

=radReceiptDeliveryType").GetROProperty("value"))=0Then

Browser("航旅天空-AG门户-旅客信息输入").Page("航旅天空-AG门户-旅客信息输入").WebButton("htmlid:

=btnNext").Click

elseifInt(Browser("航旅天空-AG门户-旅客信息输入").Page("航旅天空-AG门户-旅客信息输入").WebRadioGroup("name:

=radReceiptDeliveryType").GetROProperty("value"))=3then

Browser("航旅天空-AG门户-旅客信息输入").Page("航旅天空-AG门户-旅客信息输入").WebEdit("htmlid:

=ReceiptDelivery1_txtReceiptDeliveryName").Set"Tester"

Browser("航旅天空-AG门户-旅客信息输入").Page("航旅天空-AG门户-旅客信息输入").WebEdit("htmlid:

=ReceiptDelivery1_txtReceiptDeliveryAddress").Set"ThisisaQTPScript"

Browser("航旅天空-AG门户-旅客信息输入").Page("航旅天空-AG门户-旅客信息输入").WebEdit("htmlid:

=ReceiptDelivery1_txtReceiptDeliveryPhone").SetRandomNumber.Value(10000000,99999999)

Browser("航旅天空-AG门户-旅客信息输入").Page("航旅天空-AG门户-旅客信息输入").WebEdit("htmlid:

=ReceiptDelivery1_txtReceiptDeliveryRequireSendTime").Object.setAttribute"value",DateConvert(Cstr(date))

Browser("航旅天空-AG门户-旅客信息输入").Page("航旅天空-AG门户-旅客信息输入").WebButton("htmlid:

=btnNext").Click

elseifInt(Browser("航旅天空-AG门户-旅客信息输入").Page("航旅天空-AG门户-旅客信息输入").WebRadioGroup("name:

=radReceiptDeliveryType").GetROProperty("value"))=1then

Browser("航旅天空-AG门户-旅客信息输入").Page("航旅天空-AG门户-旅客信息输入").WebRadioGroup("name:

=radReceiptDeliveryType").Select"#0"

Browser("航旅天空-AG门户-旅客信息输入").Page("航旅天空-AG门户-旅客信息输入").WebButton("htmlid:

=btnNext").Click

else

Browser("航旅天空-AG门户-旅客信息输入").Page("航旅天空-AG门户-旅客信息输入").WebEdit("htmlid:

=ReceiptDelivery1_txtReceiptDeliveryName").Set"Tester"

Browser("航旅天空-AG门户-旅客信息输入").Page("航旅天空-AG门户-旅客信息输入").WebEdit("htmlid:

=ReceiptDelivery1_txtReceiptDeliveryPostCode").SetRandomNumber.Value(100000,999999)

Browser("航旅天空-AG门户-旅客信息输入").Page("航旅天空-AG门户-旅客信息输入").WebEdit("htmlid:

=ReceiptDelivery1_txtReceiptDeliveryAddress").Set"ThisisaQTPScript"

Browser("航旅天空-AG门户-旅客信息输入").Page("航旅天空-AG门户-旅客信息输入").WebEdit("htmlid:

=ReceiptDelivery1_txtReceiptDeliveryPhone").SetRandomNumber.Value(10000000,99999999)

Browser("航旅天空-AG门户-旅客信息输入").Page("航旅天空-AG门户-旅客信息输入").WebButton("htmlid:

=btnNext").Click

EndIf

EndIf

3.7.QTP取字符串方法

1、instr方法

InStr([start,]string1,string2[,compare])

这个函数需要的的参数是起始位置、主体字符串、要查找的字符串;Compare是可选参数。

指定字符串比较。

此compare参数是可以省略的,也可以是0,1或2。

指定0(

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > PPT模板 > 图表模板

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1