【问题标题】:TreeWalker cant see AutomationElement, but UIA Verify canTreeWalker 看不到 AutomationElement,但 UIA Verify 可以
【发布时间】:2013-03-16 06:34:03
【问题描述】:

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

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

让我烦恼的是,当我使用 UIA 验证并选择其中一个按钮时,它会设法构建和绘制层次结构。然后,如果我通过上下文菜单选择“转到兄弟”,我可以轻松地在子窗格和其他子按钮之间跳转。

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

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

【问题讨论】:

  • 我正在经历同样的挫折!可以在 UIA 验证中轻松找到东西 - 不可能通过 TreeWalker 获得我已经能够完成的相同节点。
  • 大家可以随时查看UIA Verify的出处。

标签: ui-automation


【解决方案1】:

我的猜测是您使用的是内置的托管 UIA 包装器。是这样吗? 托管版本使用具有已知限制/问题的 UIA v2。 UIA 验证直接通过 COM 使用 UIA v3。

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

您可能想要使用UIAComWrapper 而不是内置包装器,它提供相同的 API,但在底层使用 COM/UIA v3。

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2013-12-06
      • 2017-09-09
      • 2014-10-18
      • 2021-03-27
      • 2019-09-30
      • 2017-08-10
      • 2012-04-22
      • 2020-07-31
      相关资源
      最近更新 更多