UI-Automation cmdlet未找到控件

时间:2010-04-19 20:10:48

标签: c# wpf testing powershell ui-automation

我正在尝试使用MSFT提供的UI-Automation框架测试WPF应用程序。编写了一些PowerShell脚本,调用了为操作应用程序的可视控件而创建的cmdlet。

我的应用程序中有一个DropDown,它有一个条目'DropDownEntry'。在我的cmdlet中,我正在尝试执行以下操作:

 AutomationElement getItem = DropDown.FindFirst(TreeScope.Descendants,
 new AndCondition(
 new PropertyCondition(AutomationElement.ControlTypeProperty,ControlType.ListItem),
 new PropertyCondition(AutomationElement.NameProperty, "DropDownEntry",PropertyConditionFlags.IgnoreCase)));

上面给出的片段在执行时返回'null',这实际上意味着上面给出的逻辑无法找到我的下拉条目。

有人可以告诉我为什么会这样吗?我检查了我的控件名称和值。一切似乎都井然有序。我不确定为什么会发生这种情况。任何帮助将不胜感激。

由于

2 个答案:

答案 0 :(得分:2)

由于DropDown控件是自动执行的,因此在DropDown被删除之前可能无法通过UIAutomation使用子项。

您需要从DropDown元素中获取ExpandCollapse模式,然后调用其Expand方法。

我创建了一些扩展方法来帮助获取模式。这是一个例子

public static class PatternExtensions
{
    public static ExpandCollapsePattern GetExpandCollapsePattern(this AutomationElement element)
    {
        return element.GetPattern<ExpandCollapsePattern>(ExpandCollapsePattern.Pattern);    
    }

    public static T GetPattern<T>(this AutomationElement element, AutomationPattern pattern) where T : class
    {
        object patternObject = null;
        element.TryGetCurrentPattern(pattern, out patternObject);

        return patternObject as T;
    }
}

像这样使用:

DropDown.GetExpandCollapsePattern().Expand()

然后,您可以执行原始代码以查找子元素。

答案 1 :(得分:1)

如果您尚未使用,则可能需要使用UISpy检查您的申请以验证属性。