第三章对象库
QTP在对象库(OR)里为每一个被测对象存储了一个对象定义。该定义包含了一些用来唯一识别运行时对象的参数值。QTP Object Repository Manager 是用来查看和修改对象库中的对象及其属性的。
图 3-1. Object Repository Manager
图3-1,展示了一个简单的对象库。这个对象库有一个WinToolbar对象,包含了一个可以用来识别的逻辑名"Running Applications"和两个属性:"Text" 和"nativeclass" .我们可以点击"Add/Remove"按钮来添加或者删除属性。图3-2显示了从Object Identification打开的Add/Remove Properties对话框,它可以用来添加或删除任意的属性。
提示:在对象库的树视图中选择一个对象后,点击'Highlight'按钮,应用程序(必须是打开的)中的对象将会高亮显示。同样,在代码中也可以实现高亮:Window("Window").WinToolbar("Running Applications").Highlight.
图3-2.Add/Remove Properties
对象是如何被添加到对象库的?
对象可以通过两种方式添加到对象库:
● 通过录制与被测应用程序的交互过程添加。
● 手工添加一个或多个对象。
我们可以点击"Add Objects"按钮,然后点击我们要添加的对象,通过这种方式,我们便可以手工添加对象到对象库中。
注意:假如我们要添加的对象是在鼠标点击之后才出现,那么我们可以先按下Ctrl键,然后再去点击。这个方法可以让我们临时屏蔽对象选择模式,从而进行鼠标操作。一旦我们准备好了要添加的对象,就可以放开Ctrl键,进行添加了。
如果我们需要在应用程序间切换,可以先按住Ctrl+ALT键去屏蔽对象选择模式,然后使用例如Alt+Tab键来在不同的应用程序间切换,完成切换后,再次按下Ctrl+ALT键后便可进入对象选择模式并添加对象了。
对象一旦被选中,便会在对象选择窗口中出现
图3-3.对象选择
本对象选择窗口显示了Web页面上的完整的对象结构。选择你需要添加的对象然后点"OK"键就可以了。
小提示:对象选择窗口显示的对象可能会和录制到对象库的不一致。QTP只保留能识别对象的必须的对象结构,这样就可以在测试脚本使用对象时,减少代码的长度。
如果我们选择一个Page对象,然后继续,QTP就会询问我们是否要添加它的子对象。
图 3-4. 对象选择
选择Selected object and all its descendants这个单选按钮,然后点击OK, 页面上所有的对象都会被添加到对象库中去。
提示:对象库不能添加页面上的隐藏对象。
测试对象和运行时对象
测试对象(TO):测试对象是QTP定义的一些类,用它们来代表被测应用的各种对象。
运行时对象(RO):运行时对象是实际的被测应用的对象,是测试执行过程中,TO用来关联的对象。
理解这两种对象类型的区别是非常重要的。可以看成两辆车;车A和车B,QTP能在脚本里用一辆车的测试对象来描述出两辆车A和B。除此之外,每个测试对象也提供了用来和运行时对象交互时相关联的方法和属性。
比如Start,Run和Stop都是汽车对象提供的有用的方法。
TO属性
测试对象的属性是QTP为了识别在测试执行过程中的运行时对象而保留在对象库中的属性。QTP提供GetTOProperties方法来列举对象的所有的TO属性.GetTOProperty和SetToProperty则分别用了读取和修改TO的属性值。
问题 3-1. Test Object 属性的使用
'获取webeidt对象 Set oWebEdit = Browser("").Page("").WebEdit("") '获取webedit对象封装属性集合 Set TOProps = oWebEdit.GetTOProperties() Dim i, iCount iCount = TOProps.Count - 1 '遍历所有封装属性 For i = 0 ToiCount '获取属性名 sName = TOProps(i).Name '获取属性值 sValue = TOProps(i).Value '检查是否为正则表达式 isRegularExpression = TOProps(i).RegularExpression '显示结果 MsgboxsName&"->" &sValue&"->" &isRegularExpression Next |
问题 3-2. 运行时改变Test Object 属性
'获取webedit对象 Set oWebEdit = Browser("Browser").Page("Page").WebEdit("txtName") '获取webedit的name封装属性值 oldName = oWebEdit.GetTOProperty("name") '变更webedit对象的name封装属性 oWebEdit.SetTOProperty"name","new value" '获取已修改的属性 newName = oWebEdit.GetTOProperty("name") MsgBoxnewName |
问题 3-3. 测试中获取运行时对象属性
'x为WebEdit对象运行时的value属性值 x = Browser("").Page("").WebEdit("").GetROProperty("value") MsgBoxx |
提示:QTP不提供修改运行时对象属性的方法。换言之,没有SetROProperty这个方法。同样, 不同的测试对象都有一个它支持的属性列表,在QTP帮助的对象模型参考中可以找到。
对象库模式
有两种对象库,更确切的说是对象库模式。
图 3-5. 每个Action的对象库设置
每个Action对应的公共对象库
Action的对象库 | 公共对象库 |
若对象还为添加到对象库,那么可以添加到Action对象库。 | 若对象还为添加到对象库,那么可以添加到公共对象库。 |
重命名对象不会影响其他的脚本。当前的脚本会自动更新对象的命名。 | 重命名对象并不会更新所有使用公共对象库的脚本,所以这会有比较大的影响。 |
如果被测对象的属性发生改变,那么需要更改所有脚本。 | 被测对象的属性发生改变,将会更新到所有脚本中。 |
如果不是很多的测试脚本来运行同一个应用程序的情况,可以使用Action对象库。 | 如果有很多不同的脚本都在与相同的对象进行交互,那么建议使用公共对象库。 |
| 公共对象库可能会变的很大,所以需要经常备份以免损坏。 |
对象探测器 (Object Spy)
对象探测器是用来查看对象所支持的方法和属性。启动对象探测功能:Tool->Object Spy…
点击指针按钮,然后选择一个对象。当选择了Test Object Properties按钮,属性标签页中就会显示出所有可得到的TO属性,并且在方法标签页中会显示所有可获得的方法,如图3-6
图 3-6. 对象探测对象属性
若选择了Run-time Object Properties按钮,那么将会显示对象的实际属性或方法,如图3-7
Figure 3-7. 对象探测实际属性
大多数的属性值可以通过GetROProperty方法获得。想要了解对象支持的所有属性,可以参考QTP手册。
'获取对象运行时的outerhtml封装属性值
sOuterHTML = Browser("").Page("").WebEdit("").GetROProperty("outerhtml")
小提示:对象探测器不会显示出任何带有序数识别的属性,例如CreationTime, index or location.
它们只能在添加到对象库以后计算出来。
(未完待续)
版权声明:51Testing软件测试网及相关内容提供者拥有51testing.com内容的全部版权,未经明确的书面许可,任何人或单位不得对本网站内容复制、转载或进行镜像。51testing软件测试网欢迎与业内同行进行有益的合作和交流,如果有任何有关内容方面的合作事宜,请联系我们。
相关链接:
QTP自动化测试权威指南 连载(一)