WPF应用程序正在使用应用程序框架,而我都不能编辑它们。
我可以按照以下步骤访问GUI中的每个元素:
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
。在哪里可以找到此文档。
我发现的唯一内容是this,由于我只能从外部访问并且不知道控件的内容,所以我不能这样做。
最佳答案
如果我真的了解你的问题。
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
...
}
}
关于c# - 在TestStack.White中为CustomUIItem的子级获取IUIItem [],我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41881079/