1

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

我的应用程序中有一个下拉菜单,其中包含一个条目“DropDownEntry”。在我的 cmdlet 中,我正在尝试执行以下操作:

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

上面给定的代码片段在执行时返回“null”,这基本上意味着上面给定的逻辑无法找到我的下拉条目。

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

谢谢

4

2 回答 2

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()

然后你可以执行你的原始代码来找到子元素。

于 2010-04-20T08:27:08.950 回答
1

如果您还没有,您可能需要使用UISpy检查您的应用程序以验证属性。

于 2010-04-19T21:59:33.270 回答