我正在尝试使用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',这实际上意味着上面给出的逻辑无法找到我的下拉条目。
有人可以告诉我为什么会这样吗?我检查了我的控件名称和值。一切似乎都井然有序。我不确定为什么会发生这种情况。任何帮助将不胜感激。
由于
答案 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检查您的申请以验证属性。