Получение IUIItem[] для детей CustomUIItem в TestStack.White

Приложение WPF использует Application Framework, и я не могу редактировать ни один из них.

Я могу посетить каждый элемент в графическом интерфейсе и сделать что-то вроде этого:

IUIItem[] items = window.GetMultiple(SearchCriteria.All);
foreach (var item in items)
{
    visit((dynamic)item);
}

У меня нет проблем с нормальным управлением, но я ударил стену с CustomUIItem,

Я хотел бы посетить всех детей этого, но я не могу создать новый массив IUIItem[] от них.

Вот что у меня сейчас:

    void visit(CustomUIItem item)
    {
        AutomationElementCollection children =
            item
            .AutomationElement
            .FindAll(TreeScope.Children, Condition.TrueCondition);
        UIItemCollection temp = new UIItemCollection(children.Cast<AutomationElement>());
        foreach(var t in temp)
        {
            visit((dynamic)t);
        }
    }

Иногда это происходит, и большая часть времени коллекция остается пустой.

CusomControl имеет "нормальный" контроль среди своих детей. Я хочу, чтобы те, как регулярные IUIItems.

Где я могу найти документацию для этого. Единственное, что я нашел, было это, и я не могу этого сделать, так как я захожу только со стороны и не знаю содержания элемента управления.

1 ответ

Решение

Если я действительно понял вашу проблему.

    IUIItem[] items = window.GetMultiple(SearchCriteria.All);
    foreach (var item in items)
    {
        visit(item);
    }

Я обновил ваш метод visit(), теперь он принимает IUItem в качестве аргумента, чтобы разрешить посещение обычных и пользовательских элементов управления.

    public void visit(IUIItem item)
    {
        if (item is CustomUIItem)
        {
            // Process custom controls
            CustomUIItem customControl = item as CustomUIItem;

            // Retrieve all the child controls
            IUIItem[] items = customControl.AsContainer().GetMultiple(SearchCriteria.All);

            // visit all the children
            foreach (var t in items)
            {
                visit(t);
            }
            ...
        }
        else
        {
            // Process normal controls
            ...
        }
    }
Другие вопросы по тегам