QTP学习-检查焦点

上一篇 / 下一篇  2012-01-20 12:26:11 / 个人分类:qtp

QTP自带的飞机售票程序为例,录制一段代码后,加上检查焦点的代码,如下:

'目的: 利用Tab键来检查焦点的位置变化是否正确

'检查控件的focused属性的函数
Public function CheckFocus (TestObject)
'当属性值为focus,且值为true,2代表毫秒(可选)
If TestObject.CheckProperty("focused","True",2) Then
'CheckFocus的返回值就是TestObject的值
CheckFocus = True
else
CheckFocus = False
End If
End Function

'tab按键的键值
Const VK_TAB = 15

'创建DeviceReplay 对象
'CreateObject(servername.typename [, location])
'servername:提供对象的应用程序名称
'typename:该类型或对象类来创建
Set DeviceReplay = CreateObject("Mercury.DeviceReplay")

'创建Dictionary 对象,这个和创建数组很类似
Set dic = CreateObject("Scripting.Dictionary")

'添加Dictionary的key和value,把顺序号作为key, 控件对象作为value
'' Add some keys and items.其中诸如“1”就是代表keys,dialog("Login").WinEdit("Agent Name:")就是代表items
'Object.Add Key,Item
dic.add "1",dialog("Login").WinEdit("Agent Name:")
dic.add "2",dialog("Login").WinEdit("Password:")
dic.add "3",dialog("Login").WinButton("OK")

'定位到程序窗口, 并判断窗口中的默认焦点是否在正确的位置
Dialog("Login").Activate
CheckFocus(dic.item("1"))

For i=2 to dic.count
'DeviceReplay 对象用来模拟鼠标的单击和移动 、键盘输入 等,但有个前提,实用该对象前,需要保证键盘状态正确
DeviceReplay.PressKey VK_TAB '此处就是点击tab键,
If CheckFocus(dic.item(CStr(i))) = False Then
Exit for
else
msgbox "焦点正确"
End If
Next

'录制代码

Dialog("Login").WinEdit("Agent Name:").Set "mercury"
Dialog("Login").WinEdit("Agent Name:").Type micTab
Dialog("Login").WinEdit("Password:").SetSecure "4c566c3be21ec8e572177bf74214add0222e465f"
Dialog("Login").WinEdit("Password:").Type micTab
Dialog("Login").WinButton("OK").Type micTab
Dialog("Login").WinButton("Cancel").Click

===========================================================================
PS: 首先要将对象Login加入到Object Repository. 然后在运行脚本即可 。

1. 查看属性值的方法

Msgbox Window("名片界面").WinObject("名片界面_一般_昵称").GetROProperty("text")
Msgbox TypeName (Window("名片界面").WinObject("名片界面_一般_昵称").GetROProperty("text"))
actual="xiaochong"
Msgbox StrComp (Window("名片界面").WinObject("名片界面_一般_昵称").GetROProperty("text"),actual,1)

Result:

username '得到具体的text内容
string '得到text的类型
0 '比较实际得到的和actual的差别

2. 标准Windows控件的基本属性和方法
1)使用Exist属性来判断空间是否存在 :可以通过访问控件的Exist属性来判断控件是否存在于当前打开的应用程序中。

2)使用CheckProperty检查控件属性
:使用此方法可以实现与标准检查点想类似的功能。 例如。检查控件的属性是否与指定值相一致,如果一致,则在测试结果中标示为pass,否则标识为fail。
:其实现个功能与checkpoint实现的功能基本一致。
3)使用GetROProperty获取控件的属性
:此方法用于返回测试对象的当前属性
3. DeviceReplay 可以实现鼠标点击桌面上任意指定的坐标,或者模拟点击键盘操作。 好像在判断大小写的时候有局限性, 这里有篇小文章简单介绍了下,

感兴趣的可以研究下:
http://www.51testing.com/?161787/action_viewspace_itemid_84200.html
================================================================================
代码中提到的对象:
DeviceReplay 对象用来模拟鼠标的单击和移动 、键盘输入 等,但有个前提,实用该对象前,需要保证键盘状态正确
如NUMLOCK是否打开等,因为DeviceReplay不能检测键盘状态 。

Mercury.DeviceReplay包括如下方法:
1.SendString 方法
向激活的窗口发送一个或多个键盘按键:object.SendString(str)
2.KeyDown 方法
模拟一个按键的按下并保持:object.KeyDown(key)key:按键的数码值
3.KeyUp方法:
模拟通过键盘释放某个按下的按键:object.KeyUp(key)
4.PressKey方法
模拟通过键盘按下一个按键并立即释放:object.PressKey(key)
5.PressKeys方法
模拟通过键盘多次按下一个按键并立即释放:object.PressNKey(key,N),其中N:重复次数
6.DragAndDrop方法
用户执行从一点拖动到另外一点的操作:
object.DragAndDrops(dragX,dragY,dropX,dropY,Button)
Button的值包括
LEFT_MOUSE_BUTTON=0
MIDDLE_MOUSE_BUTTION=1
RIGHT_MOUSE_BUTTON=2
7.MouseClick方法
在指定的屏幕位置执行鼠标左键或右键的单击操作:object.MouseClick(x,y,Button)
8.MouseDbClick方法
在指定的屏幕位置中执行鼠标左键或右键的双击事件:object.MouseDblClick(x,y,Button)
9.MouseDown 方法
在指定的屏幕位置中执行鼠标左键或右键的双击事件:并保持按下状态:object.MouseDown(x,y,Button)
10.MouseUp方法
用于释放之前执行的MouseDown方法所按下鼠标按键:object.MouseDown(x,y,Button)
10.MouseUp方法
用于释放之前执行的MouseDown方法索按下的鼠标按键:object.MouseDown(x,y,Button)
11.MouseMove方法
用于模拟鼠标移动:object.MouseMove(x,y)
12.SetSynchronization Timeout方法
设置一个新的同步短时的时间值:object.SetSynchronizationTimeout(nSyncTimeout,is_sec)
nSyncTimeout:同步短时的时间值
is_sec:指定设置的时间值是否为秒为单位

============================================================================

VBScript的内置对象Dictionary
11.1 VBScript的内置对象概述
属性(Property)和方法(Method)构成对象,属性是对象的内嵌变量,方法是对象的内嵌函数。(以Dreamweaver中的Behaviors是由Event和Actions构成做类比讲解)

11.2 Dictionary对象概述
Dictionary对象的作用是保存数据键和项目对,其功能类似二元数组,即把关键字和关联的项目合在一起。下列脚本可形象地说明Dictionary对象的用法:

Dim gyc(定义变量gyc)

Set gyc=CreateObject("Scripting.Dictionary")(创建的Dictionary脚本对象,其名称为gyc)

gyc.Add "0","星期日"(添加项目和键,其中Add是Dictionary对象的方法之一)

gyc.Add "1","星期一"(同上)

gyc.Add "2","星期二"(同上)

11.3 Dictionary对象的属性
n CompareMode属性
设置并返回在Dictionary对象中比较字符串关键字的比较模式,其语法为:

Object.CompareMode〔=Compare〕

n Count属性
只读属性,返回一个Dictionary对象包含的项目数,其语法如下:

Object.Count

n Key属性
在Dictionary对象中设置Key,其语法如下:

Object.Key(Key)=NewKey

其中Object为Dictionary对象的名称;参数Key为必选项,是被改变的Key值;参数NewKey为必选项,表示代替指定Key值的新值;若在更改Key值时未找到Key,脚本将发生运行错误。Key属性的用法见下实例:

Dim gyc

Set gyc=CreateObject("Scripting.Dictionary")

gyc.Add "0","星期日"

gyc.Add "1","星期一"

gyc.Add "2","星期二"

gyc.key("0")="Sunday"(将"0"的键设置为"Sunday")

n Item属性
设置或返回Dictionary对象中指定的Key对应的Key相应的Item,其语法如下:

Object.Item(Key)〔=NewItem〕

其中Object为Dictionary对象的名称;参数Key为必选项,表示与检索或添加的Item相关联的Key;参数NewItem为可选项;Item属性的用法见如下属性:

Dim gyc

Set gyc=CreateObject("Scripting.Dictionary")

gyc.Add "0","星期日"

gyc.Add "1","星期一"

gyc.Add "2","星期二"

gyc.key("0")="Sunday"(将"0"的键设置为"Sunday")

Itemgyc=gyc.Item("0")(返回县官项目"Sunday")

11.4 Dictionary对象的方法
n Add方法
向Dictionary对象中添加键和项目对,其语法如下:

Object.Add Key,Item

其中Object为Dictionary对象的名称;参数Key为必选项,为与添加的Item相关的Key;参数Item为必选项,为与添加的Key相关的Item。

n Exists方法
若在Dictionary对象中存在指定键,则返回True;若不存在,则返回False,其语法如下:

Object.Exists(Key)

其中Object为Dictionary对象的名称;参数Key为必选项,为在Dictionary对象中查找的Key值;关于Exists方法的实例如下:

<html>

<head>

<title>Welcome…</title>

<Script. Language="VBScript">

<!--

Function FindKey()

Dim gyc

Set gyc=CreateObject("Scripting.Dictionary")

gyc.Add "0","星期日"

gyc.Add "1","星期一"

gyc.Add "2","星期二"

If gyc.Exists("2") Then

FindKey=True

Else

FindKey=False

End If

MsgBox FindKey

End Function

-->

</Script>

</head>

<body nload="FindKey">

<hr Size="1",Color="#FF0000">

</body>

</html>

n Keys方法
返回一个数组,其中包含有Dictionary对象的所有现存键,其语法如下:

Object.Keys

其中Object为Dictionary对象的名称,其实例如下:

<html>

<head>

<title>Welcome...</title>

<Script. Language="VBScript">

<!--

Function DicKeys()

Dim gyc,i,allkey,strkeys

Set gyc=CreateObject("Scripting.Dictionary")

gyc.Add "0","星期日"

gyc.Add "1","星期一"

gyc.Add "2","星期二"

allkey=gyc.keys

For i=0 to gyc.Count-1

strkeys=strkeys & allkey(i) & Chr(10)

Next

Dickeys=strkeys

MsgBox Dickeys

End Function

-->

</Script>

</head>

<body nload="DicKeys">

<hr Size="1",Color="#FF0000">

</body>

</html>

脚本的输出结果为0,1,2(注意区别Items方法)

n Items方法
返回一个数组,其中包含有Dictionary对象的所有项目,其语法如下:

Object.Items

其中Object为Dictionary对象的名称,其实例如下:

<html>

<head>

<title>Welcome...</title>

<Script. Language="VBScript">

<!--

Function DicItems()

Dim gyc,i,allitem,stritems

Set gyc=CreateObject("Scripting.Dictionary")

gyc.Add "0","星期日"

gyc.Add "1","星期一"

gyc.Add "2","星期二"

allitem=gyc.Items

For i=0 to gyc.Count-1

stritems=stritems & allitem(i) & Chr(10)

Next

DicItems=stritems

MsgBox DicItems

End Function

-->

</Script>

</head>

<body nload="DicItems">

<hr Size="1",Color="#FF0000">

</body>

</html>

脚本的输出结果为星期日、星期一、星期二(注意区别Key方法)

n Remove方法
从Dictionary对象中删除键和项目对,其语法如下:

Object.Remove(Key)

其中Object是Dictionary对象的名称;参数Key为必选项,为要从Dictionary对象中删除的键和项目对相关联的Key,若Object.Remove(Key)中指定的Key不存在,将发生脚本错误,其实例如下:

Dim gyc

Set gyc=CreateObject("Scripting.Dictionary")

gyc.Add "0","星期日"

gyc.Add "1","星期一"

gyc.Add "2","星期二"

gyc.Remove("0")(删除Dictionary对象中的第一个项目对)

n RemoveAll方法
删除Dictionary对象中的所有键和项目对,其语法如下:

Object.RemoveAll

其中Object为Dictionary对象的名称;其实例如下:

Dim gyc

Set gyc=CreateObject("Scripting.Dictionary")

gyc.Add "0","星期日"

gyc.Add "1","星期一"

gyc.Add "2","星期二"

gyc.RemoveAll(清除Dictionary对象)


TAG:

 

评分:0

我来说两句

日历

« 2024-04-27  
 123456
78910111213
14151617181920
21222324252627
282930    

数据统计

  • 访问量: 36644
  • 日志数: 104
  • 建立时间: 2011-10-10
  • 更新时间: 2012-04-12

RSS订阅

Open Toolbar