Получение 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
имеет "нормальный" контроль среди своих детей. Я хочу, чтобы те, как регулярные IUIItem
s.
Где я могу найти документацию для этого. Единственное, что я нашел, было это, и я не могу этого сделать, так как я захожу только со стороны и не знаю содержания элемента управления.
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
...
}
}