Командлет UI-Automation не находит элемент управления - PullRequest
1 голос
/ 20 апреля 2010

Я пытаюсь протестировать приложение WPF, используя среду автоматизации пользовательского интерфейса, предоставляемую MSFT. Было написано несколько сценариев PowerShell, которые вызывали командлеты, созданные для управления визуальными элементами управления приложения.

В моем приложении есть DropDown, в котором есть запись DropDownEntry. В моем командлете я пытаюсь сделать что-то следующее:

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

Приведенный выше фрагмент кода возвращает «null» при выполнении, что по сути означает, что приведенная выше логика не смогла найти мою раскрывающуюся запись.

Может кто-нибудь сказать мне, почему это может происходить? Я проверил имя моего элемента управления и значения. Кажется, все в порядке. Я не уверен, почему это произойдет. Любая помощь будет высоко ценится.

Спасибо

Ответы [ 2 ]

2 голосов
/ 20 апреля 2010

Поскольку это элемент управления DropDown, который вы автоматизируете, возможно, что дочерние элементы недоступны через UIAutomation, пока DropDown не выпадет.

Вам нужно получить шаблон ExpandCollapse из элемента DropDown, а затем вызвать его метод 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 голос
/ 20 апреля 2010

Если вы еще этого не сделали, вы можете проверить свое приложение с помощью UISpy , чтобы проверить свойства.

...