如何获取测试对象的逻辑名称(存在于关联的共享OR中)?

The*_*One 6 qtp hp-uft

我们说我传递Browser("MyBrowser").Page("MyPage").WebCheckBox("MyBox")给一个函数:

MyFunction (Browser("MyBrowser").Page("MyPage").WebCheckBox("MyBox"))
Run Code Online (Sandbox Code Playgroud)

稍后,该函数想要记录所接收的测试对象的逻辑名称(在这种情况下,当然是"MyBox").

怎么会这样呢?

"name"测试对象属性返回重新添加测试对象时生成的名称. 逻辑名称没有(记录的)测试对象属性. 运行时对象属性不可能包含名称,因为它不是AUT GUI中的名称.

所以我认为测试对象不知道它的名字.只有存储库"知道"测试对象存储在哪个名称下.

所以我将不得不检查存储库本身,而不是测试对象.

ObjectRepositoryUtilAPI允许我(通过GetChildren,或其他方法)来找到repository's测试对象集合中的测试对象,并使用该GetLogicalName方法来得到它的名字.精细.

但是,使其工作的唯一方法是通过加载来获取对存储库的引用.我得到的印象是,这个API旨在操纵(或分析)来自QTP外部的回购,而不是来自测试运行.我不想重新加载存储库.我想在一个已经加载的存储库中查找测试对象.

RepositoriesCollectionAPI可以告诉其加载(通过其名称和路径)我,但它不提供获取的手段引用到对象实例代表的库之一.

那么我怎样才能获得对已经加载的存储库的引用,所以我可以使用GetLogicalName

或者通常问:给定对当前操作的共享存储库中包含的"普通"测试对象的引用,如何以编程方式找到其逻辑名称?

如果有一些超明智QTP向导一拉Motti谁知道这能不能做到,我倒是很欣赏来自他一个答案,即使它写着"不能做"如果这是真的.

Xia*_*ofu 9

你想要"TestObjName"属性:

function GetRepoName(obj)
    GetRepoName = obj.GetTOProperty("TestObjName")
end function
Run Code Online (Sandbox Code Playgroud)

用法:

logicalName = GetRepoName(Browser("MyBrowser").Page("MyPage").WebCheckBox("MyBox"))
'logicalName now equals "MyBox"
Run Code Online (Sandbox Code Playgroud)

如果您觉得需要将整个对象链重建为字符串,可以使用以下方法"GetFullQtpName"(这也需要GetRepoName以及下面的2个额外方法):

function GetFullQtpName(obj)
    dim fullQtpName : fullQtpName = MakeQtpName(obj)
    dim objCurrent : set objCurrent = obj

    do while not IsEmpty(objCurrent.GetTOProperty("parent"))
        set objCurrent = objCurrent.GetTOProperty("parent")
        fullQtpName = MakeQtpName(objCurrent) & "." & fullQtpName
    loop

    GetFullQtpName = fullQtpName
end function

function MakeQtpName(obj)
    MakeQtpName = GetClassName(obj) & "(""" & GetRepoName(obj) & """)"
end function

function GetClassName(obj)
    GetClassName = obj.GetTOProperty("class Name")
end function
Run Code Online (Sandbox Code Playgroud)

用法:

fullQtpName = GetFullQtpName(Browser("MyBrowser").Page("MyPage").WebCheckBox("MyBox"))
'fullQtpName now equals "Browser("MyBrowser").Page("MyPage").WebCheckBox("MyBox")"
Run Code Online (Sandbox Code Playgroud)