You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用UIAutomation(FlaUI)测试DevExpress Tree List并查找不可见节点

DevExpress TreeList控件FlaUI测试:屏幕外节点定位解决方案
  • 启用DevExpress专属自动化支持
    DevExpress TreeList自带UIAutomation扩展能力,先确认控件已开启EnableWin32Compatibility或相关自动化属性配置。直接调用控件的ITreeListAutomationPeer接口,能获取完整节点列表,不受可见性限制,不用依赖FlaUI的通用查找逻辑。

  • 滚动加载后再查找
    先定位目标节点的父节点并展开,然后模拟滚动TreeList控件,把目标节点滚到可视区域后再执行查找:

// 定位并展开父节点
var parentItem = treeView.FindFirstDescendant(cf => 
    cf.ByValue(parentPath).And(cf.ByControlType(ControlType.TreeItem)));
parentItem?.Expand();

// 找到滚动控件并执行滚动(根据实际结构调整)
var scrollViewer = treeView.FindFirstDescendant(cf => cf.ByControlType(ControlType.ScrollViewer));
scrollViewer?.ScrollVertical(ScrollAmount.LargeIncrement);

// 再次查找目标节点
var targetItem = treeView.FindFirstDescendant(cf => 
    cf.ByValue(fullPath).And(cf.ByControlType(ControlType.TreeItem)));
targetItem?.Click();
  • 直接操作原生控件节点
    如果能拿到TreeList的原生控件实例(WinForms/WPF),直接遍历控件的Nodes集合定位目标,再触发点击:
// 以WinForms为例,获取原生TreeList实例
var nativeTreeList = treeView.NativeElement as DevExpress.XtraTreeList.TreeList;
var targetNode = nativeTreeList?.Nodes.FindNodeByFieldValue("FullPath", fullPath);

if (targetNode != null)
{
    nativeTreeList.FocusedNode = targetNode;
    nativeTreeList.SelectNode(targetNode);
    nativeTreeList.PerformClick(targetNode);
}
  • 用RawViewWalker强制遍历所有节点
    创建忽略可见性的TreeWalker,遍历所有节点后筛选目标:
var rawTreeWalker = TreeWalkerFactory.GetRawViewWalker();
var allNodes = new List<AutomationElement>();

// 从根节点开始遍历所有节点
void TraverseNodes(TreeWalker walker, AutomationElement node, List<AutomationElement> nodes)
{
    nodes.Add(node);
    var child = walker.GetFirstChild(node);
    while (child != null)
    {
        TraverseNodes(walker, child, nodes);
        child = walker.GetNextSibling(child);
    }
}

var rootNode = treeView.FindFirstDescendant(cf => cf.ByControlType(ControlType.TreeItem));
if (rootNode != null) TraverseNodes(rawTreeWalker, rootNode, allNodes);

// 筛选目标节点并点击
var targetItem = allNodes.FirstOrDefault(n => n.GetValuePattern().Current.Value == fullPath);
targetItem?.Click();

内容的提问来源于stack exchange,提问作者Maria

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 20:35:13