我对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);
}
}
答案 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);
}
}