【问题标题】:Getting / ussing full path to find controls in UIA and White获取/使用完整路径在 UIA 和 White 中查找控件
【发布时间】:2012-11-20 19:16:21
【问题描述】:

我正在使用 Microsoft UI 自动化 + White 框架。是否可以从顶级父控件获取 完整路径,然后使用它来查找元素?比如,使用 UI spy 获取完整路径,然后以某种方式通过所取路径获取控件?

谢谢

【问题讨论】:

    标签: ui-automation white-framework microsoft-ui-automation


    【解决方案1】:

    我使用 MSUIA 的非托管版本并且不使用白色,但是像这样的东西应该可以满足您的要求。传入一个元素。

            CUIAutomation auto = new CUIAutomation();
    
            var desktop = auto.GetRootElement();
            var walker = GetRawTreeWalker();
            while (true)
            {
                element = walker.GetParentElement(element);
                if (auto.CompareElements(desktop, element) == 1)
                {
                    break;
                }
                winPath = AppendWinPathPart(winPath, element);
            }
    

    AppendWinPathPart 是对一种方法的调用,该方法构建了类似字符串形式的路径,我在自动化中使用了该方法。它很像 MSUIA 的 XPath。

    【讨论】:

    • 我赞成使用非托管版本的 UIA。 White 仍然使用旧的托管版本,我个人认为它速度较慢、稳定性较差且兼容性较差。
    【解决方案2】:

    我过去做过一些类似于您正在尝试做的事情。不幸的是,这并不一定那么容易做到。

    我基本上构建了我自己的 UI Spy 简化版本,它使用了一些类似于上面@chrismead 答案中的代码来构建自动化 ID 的“\”分隔路径(不幸的是,正如您可能已经发现的那样,AutomationID 可以是不可靠的,因此为了稳健性,我还必须添加通过名称、兄弟之间的位置或相对于父级的位置来识别 AutomationElements 的功能。

    然后,我在另一个应用程序中有代码,可以将这些路径作为输入,以便定位那些特定的 AutomationElement 并与它们进行交互。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-07
      • 1970-01-01
      • 2017-03-16
      • 1970-01-01
      相关资源
      最近更新 更多