我在VS2012中使用Coded UI。 我想解决一个有趣的问题。 例如,有一个应用程序有一个窗口,它有一个动态内容的标题。 我想通过它的标题搜索这个窗口。 接下来的标题是可能的情况:
"AAAAAAAA This is a window title ASDASDASD or"
"BBBBBBBB This is a window title WSDWSDWSD or not"
"CCCCCCCC This is a window title ASDASDASD or"
"........ This is a window title ASDASDASD"
我想搜索包含“这是一个窗口”和“或不是”的内容。 如果我可以使用正则表达式,我使用以下表达式来查找此标题: *这是一个窗口*或不* 。
我强调,这只是一个例子。关键是有一个标题,其中包含一些修复字符串。
我知道,UITestControl有PropertyExpressionCollection,其名称是SearchProperties。 我可以添加一个PropertyExpression(propertyName,propertyValue,conditionOperator)对象。 问题是:我可以通过两个步骤(正式)决定SearchProperties:
WinWindow.SearchProperties.Add(WinWindow.PropertyNames.Name,"This is a window", PropertyExpressionOperator.Contains);
WinWindow.SearchProperties.Add(WinWindow.PropertyNames.Name,"or not", PropertyExpressionOperator.Contains);
我怎么能在一个简单的步骤中完成? 或者哪种解决方案可以实现这一要求?
提前致谢, 彼得
答案 0 :(得分:0)
有几种方法可以做到, 1.如果您知道如何动态生成页面标题, 创建一个静态变量/类并在运行时生成标题并使用您的代码。
答案 1 :(得分:0)
由于上面提到的原因,似乎最好的解决方案是通过桌面下的所有窗口进行迭代。这是一个片段(用于测试我正在寻找一个记事本窗口)我不是太自豪,但是工作和完成不到一秒钟:
UITestControl result = null;
var TM = Playback.GetCoreTechnologyManager("MSAA");
var desktop = UITestControl.Desktop.GetChildren()[1].GetProperty(UITestControl.PropertyNames.UITechnologyElement) as UITechnologyElement;
var windowEnumerator = TM.GetChildren(desktop, null);
windowEnumerator.Reset();
while (windowEnumerator.MoveNext())
{
UITechnologyElement current = windowEnumerator.Current as UITechnologyElement;
if (current.Name != null &&
current.Name.Contains("Notepad") &&
current.Name.Contains("Untitled"))
{
result = UITestControlFactory.FromNativeElement(current.NativeElement, "MSAA");
break;
}
}
}
我使用了MSAA技术管理器,因为它比使用UITestControls快了大约七倍。下到MSAA级别(IAccessible)可以在大约50毫秒内完成工作,但使用WinApi函数可能会得到相同的结果。
对不起,我现在想不出任何更简单的解决方案。