TreeWalker无法看到AutomationElement,但是UIA Verify可以

时间:2013-03-26 12:49:56

标签: ui-automation

我正在使用UI自动化框架,我正在尝试使用TreeWalker解析我的UI。 (我也尝试了建议的解决方案here,但它没有多大帮助。)

我有一个包含一个子窗格和几个子窗口的窗格。他们都处于同一水平,所以我想我们可以称他们为兄弟姐妹。当我使用TreeWalker来解析元素时,我只能“看到”窗格 - 而不是按钮 - 我实际上已经过了。

当我使用UIA验证并选择其中一个按钮时,我遇到了什么问题,它设法构建并绘制层次结构。然后,如果我通过上下文菜单选择“Go to sibling”,我可以轻松地在子窗格和其他子按钮之间跳转。

我尝试了所有不同版本的TreeWalker,例如控制和原始,但我最终得到相同的结果 - 没有 - 它只看到子窗格。

有人可能会给我一个关于UIA Verify如何构建其层次结构并仍然显示(并设法在所有组件之间导航)的高级概述?为什么我不能在代码中复制它?

2 个答案:

答案 0 :(得分:0)

我的猜测是你使用内置的托管UIA包装器。是这样的吗? 托管版本使用UIA v2,它具有已知的限制/问题。 UIA Verify直接使用UIA v3到COM。

要验证是否是这种情况,您可以尝试使用UISpy代替UIA验证。它也使用旧的托管包装器,因此如果它与您的代码有相同的问题 - 那将是一种确认。

您可能希望使用UIAComWrapper而不是内置包装器,它提供相同的API,但在引擎盖下使用COM / UIA v3。

答案 1 :(得分:0)

我不确定是什么问题,我没有你的应用程序,所以我可以测试它,但你是否尝试使用AutomationElement.FindAll函数?如果您想要检索元素的所有子元素,可以使用如下代码:

collection = parent.FindAll(TreeScope.Children, Condition.TrueCondition);

这将返回控制孩子。您还可以尝试使用此tool测试您的应用程序,看看它是否找到了按钮。此工具是使用.NET Framework 4.0制作的。祝你好运!