无法在C#中使用RepositoryUtil.dll读取TSR对象存储库

时间:2015-04-30 08:33:09

标签: c# qtp

我对C#和.net很新。我的任务是创建一个WPF应用程序POC来读取.tsr文件中的QTP对象存储库,并使用该存储库中的所有对象及其子对象填充TreeView。

我获得了QTP的RepositoryUtil.dll和以下示例代码以适应C#:

PRINT

现在我对Visual Basic不是很熟悉,但我正在尝试在控制台应用程序中对其进行如下调整,以检查是否填充了字符串“title”。

    Dim i
    Dim ORFile = "D:\TAF\Size.tsr"
    Dim ORObj = CreateObject("Mercury.ObjectRepositoryUtil")

    ORObj.Load(ORFile)

    Dim ObjectCollection = ORObj.GetChildren

    For i = 0 To ObjectCollection.Count - 1

        Dim Obj = ObjectCollection.Item(i)

        Dim temp1 = "" & Obj.GetTOProperty("micclass") & "(""" & ORObj.GetLogicalName(Obj) & """)"


        Dim treeItem = New TreeViewItem

        Dim tNode = New TreeViewItem() With {.Header = temp1}

        treeview1.Items.Add(tNode)

        tNode = treeview1.Items(i)

        Add(ORObj, Obj, tNode)

    Next

但是当我运行它时,我得到一个InvalidCastException:{“返回参数的类型无效。”}“var ChildObjects = ORUtil.GetChildren();”

我无法弄清楚ORUtil.GetChildren()返回的是什么错误或类型,因为库没有提供文档,我在网上找不到任何文件。

那么,任何人都可以告诉我这里到底做错了什么,以及正确的方法是什么?

编辑:

以下是上述例外的堆栈跟踪:

    static void Main(string[] args)
    {
        string ORFilePath = @"D:\TAF\Size.tsr";
        ObjectRepositoryUtil ORUtil = new ObjectRepositoryUtil();
        ORUtil.Load(ORFilePath);
        var ChildObjects = ORUtil.GetChildren();
        for (int i = 0; i < ChildObjects.Count(); i++ )
        {
            var ChildObject = ChildObjects.Item(i);
            string title = ChildObject.GetTOProperty("micclass") + "(\"" + ORUtil.GetLogicalName(ChildObject) + "\")";
            Console.WriteLine(title);
        }
    }

1 个答案:

答案 0 :(得分:2)

在一些帮助下,我解决了自己的问题。

我试图做的是尝试添加RepositoryUtil.dll作为参考并调用其方法。我应该做的是使用以下内容获取QTP注册的ObjectRepositoryUtil的程序标识符:

Type.GetTypeFromProgID("Mercury.ObjectRepositoryUtil");
dynamic ORUtil = Activator.CreateInstance(ORType);

我已按如下方式修改了代码,但它确实有效。

static void Main(string[] args)
{
    Type ORType = Type.GetTypeFromProgID("Mercury.ObjectRepositoryUtil"); 
    dynamic ORUtil = Activator.CreateInstance(ORType);

    string ORFilePath = @"D:\TAF\Size.tsr";
    //ObjectRepositoryUtil ORUtil = new ObjectRepositoryUtil();
    ORUtil.Load(ORFilePath);
    var ChildObjects = ORUtil.GetChildren();
    for (int i = 0; i < ChildObjects.Count(); i++ )
    {
        var ChildObject = ChildObjects.Item(i);
        string title = ChildObject.GetTOProperty("micclass") + "(\"" + ORUtil.GetLogicalName(ChildObject) + "\")";
        Console.WriteLine(title);
    }
}