在Coded UI中使用正则表达式进行搜索

时间:2014-02-14 18:16:44

标签: regex visual-studio coded-ui-tests

我在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);

我怎么能在一个简单的步骤中完成? 或者哪种解决方案可以实现这一要求?

提前致谢, 彼得

2 个答案:

答案 0 :(得分:0)

有几种方法可以做到, 1.如果您知道如何动态生成页面标题, 创建一个静态变量/类并在运行时生成标题并使用您的代码。

  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函数可能会得到相同的结果。

对不起,我现在想不出任何更简单的解决方案。