如何用FLAUI提取WPF应用中Inspect工具不可见的列表元素数据(已解决)
编辑1:
我尝试用另一个UI检查工具Snoop查看,找到了想要的元素。FLAUI Inspector工具中显示为ListItem的元素对应Snoop中的ListBoxItem,蓝色高亮的就是我要找的元素。但遗憾的是,我无法通过FLAUI获取这些数据。若能找到获取数据的方法,我将不胜感激。

解决方案
针对你的场景,以下几种方法可以尝试提取目标数据:
1. 遍历ListItem的子控件
FLAUI支持通过FindAllChildren()或FindFirstDescendant()方法遍历ListItem的子元素,定位到承载橙色标注数据的文本类控件(如TextBlock、TextBox),然后读取其Text属性。示例代码:
// 定位到目标列表控件 var targetList = application.GetMainWindow() .FindFirstDescendant(cf => cf.ByControlType(ControlType.List)); // 获取列表中所有ListItem var listItems = targetList.FindAllChildren(cf => cf.ByControlType(ControlType.ListItem)); foreach (var item in listItems) { // 根据控件类型或AutomationId筛选目标元素 var dataElement = item.FindFirstDescendant(cf => cf.ByControlType(ControlType.Text)); if (dataElement != null) { var extractedData = dataElement.Text; // 处理提取到的数据 } }
2. 读取AutomationProperties属性
如果WPF控件设置了AutomationProperties.Name或AutomationProperties.HelpText这类自动化属性,FLAUI可以直接通过元素的Name或HelpText属性获取数据。你可以在Snoop中确认这些属性是否存在,若有则直接读取:
var extractedData = listItem.Name; // 或 listItem.HelpText
3. 使用RawView模式获取完整控件树
如果默认的控件视图无法访问深层子元素,可切换到UIA的RawView模式,它能展示更完整的控件结构。示例代码:
var rawTreeWalker = new TreeWalker(ConditionFactory.RawViewCondition); var currentChild = rawTreeWalker.GetFirstChild(listItem); while (currentChild != null) { // 检查子元素是否为目标文本控件 if (currentChild.ControlType == ControlType.Text) { var extractedData = currentChild.Text; // 处理数据 } currentChild = rawTreeWalker.GetNextSibling(currentChild); }
参考资料
- FLAUI官方GitHub Wiki:里面有控件查找、树遍历的详细教程,可学习核心API的使用方式
- 微软UIAutomation官方文档:了解RawView模式等底层自动化机制,帮助理解FLAUI的工作原理
内容的提问来源于stack exchange,提问作者user14982772
相关产品推荐
相关产品推荐

