51Testing软件测试论坛

标题: 怎么把qtp对象库中的对象读取出来 [打印本页]

作者: zhou840401    时间: 2007-9-20 16:40
标题: 怎么把qtp对象库中的对象读取出来
如果用一门编程语言把qtp对象库中存取的对象读取出来?(window,dialog,button,label,edit类似这些对象),qtp本身的keyword 视图,想添加一个step,点击出现很多对象,可供你选择.不知道qtp对象库是如何来存取对象和属性的.如果知道它的格式就好了.先谢了.
作者: walker1020    时间: 2007-9-20 21:51
我记得在 QTP  Help里面有个类似的例子,你可以找找看。
作者: zhou840401    时间: 2007-9-21 09:23
原帖由 walker1020 于 2007-9-20 21:51 发表
我记得在 QTP  Help里面有个类似的例子,你可以找找看。

谢了
作者: namedxf    时间: 2007-9-21 11:23
QTP是通过对象的属性值来识别对象库里的对象的,弄懂它是怎么从库中取值的,就知道QTP的基本原理了。
作者: tanky    时间: 2008-7-11 21:40
有人能给你个完整的答案吗?
作者: 陈能技    时间: 2008-7-11 23:06
写个VBS脚本就行了,用ObjectRepositoryUtil对象,下面是QTP帮助文档中的一个例子:

'The following example retrieves an object repository's objects and properties,
'looks for specific test objects using several methods, and copies a test object
'to another object repository.

Dim ImageObj, PageObj, RepositoryFrom, RepositoryTo

Set RepositoryFrom = CreateObject("Mercury.ObjectRepositoryUtil")
Set RepositoryTo = CreateObject("Mercury.ObjectRepositoryUtil")

RepositoryFrom.Load "C:\QuickTest\Tests\Flights.tsr"
RepositoryTo.Load "E:\Temp\Tests\Default.tsr"
Function EnumerateAllChildProperties(Root)
'The following function recursively enumerates all the test objects directly under
'a specified parent object. For each test object, a message box opens containing the
'test object's name, properties, and property values.
    Dim TOCollection, TestObject, PropertiesCollection, Property, Msg

    Set TOCollection = RepositoryFrom.GetChildren(Root)

    For i = 0 To TOCollection.Count - 1
            Set TestObject = TOCollection.Item(i)
            Msg = RepositoryFrom.GetLogicalName(TestObject) & vbNewLine
            Set PropertiesCollection = TestObject.GetTOProperties()

            For n = 0 To PropertiesCollection.Count - 1
                Set Property = PropertiesCollection.Item(n)
                Msg = Msg & Property.Name & "-" & Property.Value & vbNewLine
            Next
            MsgBox Msg

EnumerateAllChildProperties TestObject
    Next

End Function

Function EnumerateAllObjectsProperties(Root)
'The following function enumerates all the test objects under a specified object.
'For each test object, a message box opens containing the test object's name,
'properties, and property values.
Dim TOCollection, TestObject, PropertiesCollection, Property, Msg

    Set TOCollection = RepositoryFrom.GetAllObjects(Root)

    For i = 0 To TOCollection.Count - 1
        Set TestObject = TOCollection.Item(i)
                    Msg = RepositoryFrom.GetLogicalName(TestObject) & vbNewLine

            Set PropertiesCollection = TestObject.GetTOProperties()
            For n = 0 To PropertiesCollection.Count - 1
                Set Property = PropertiesCollection.Item(n)
                Msg = Property.Name & "-" & Property.Value & vbNewLine
            Next

        MsgBox Msg
    Next

End Function

Function RenameAllImages(Root)
'The following function sets a new name for all image test objects under a specified object.
Dim TOCollection, TestObject, PropertiesCollection, Property

    Set TOCollection = RepositoryTo.GetAllObjectsByClass("Image")

    For i = 0 To TOCollection.Count - 1
            Set TestObject = TOCollection.Item(i)
            RepositoryTo.RenameObject (TestObject, "Image " & i)
            RepositoryTo.UpdateObject TestObject
    Next

End Function

Function RemoveAllLinks(Root)
'The following function recursively enumerates all the test objects under a specified object.
'It looks for all test objects of class Link and removes them from their parent objects.
    Dim TOCollection, TestObject, PropertiesCollection, Property

    Set TOCollection = RepositoryFrom.GetChildren(Root)

    For i = 0 To TOCollection.Count - 1
            Set TestObject = TOCollection.Item(i)
            TOClass = TestObject.GetTOProperty("micclass")

         If TOClass = "Link" Then
                RepositoryFrom.RemoveObject Root, TestObject
            End If

        EnumerateAllChildProperties TestObject
    Next

End Function
作者: tanky    时间: 2008-7-12 09:27
谢谢楼上这位达人

我的QTP9.0运行这段代码时,在运行到:

Set RepositoryFrom = CreateObject("Mercury.ObjectRepositoryUtil")

就报错:ActiveX部件不能创建对象:"Mercury.ObjectRepositoryUtil"

而且这段代码在QTP的帮助文档里找不到啊!ObjectRepositoryUtil都找不到

???
作者: 陈能技    时间: 2008-7-12 09:52
换成9.5看看
作者: tanky    时间: 2008-7-12 10:07
一个英文网站上说:需要安装QuickTest Plus,在QuickTest Plus里面手工注册:

RepositoryUtil.dll。而且还说不知到9.0是否支持。

我在9.0的基础上装了一个8.2的QuickTest Plus。按他说的做了

Set RepositoryFrom = CreateObject("Mercury.ObjectRepositoryUtil")没问题了

RepositoryFrom.Load又报错:'Load'-General error.

继续研究中,谢谢!
作者: 陈能技    时间: 2008-7-12 10:35
在9.5中可以执行以下代码:
Dim RepositoryFrom,TOCollection
Set RepositoryFrom = CreateObject("Mercury.ObjectRepositoryUtil")
RepositoryFrom.Load "C:\Login.tsr"
Set TOCollection = RepositoryFrom.GetAllObjectsByClass("WinButton")
Msgbox TOCollection.Count

但是不建议使用,因为会出现RunTime错误。
作者: Randall    时间: 2008-7-13 11:15
有没有什么办法处理这个run time error呢?
作者: zhou840401    时间: 2008-7-14 17:01
标题: 回复 5# 的帖子
9.5新功能吧,9.0的好像没有看到过,看来有时间得去找一下9.5的看看。




欢迎光临 51Testing软件测试论坛 (http://bbs.51testing.com/) Powered by Discuz! X3.2