【发布时间】:2012-11-20 19:16:21
【问题描述】:
我正在使用 Microsoft UI 自动化 + White 框架。是否可以从顶级父控件获取 完整路径,然后使用它来查找元素?比如,使用 UI spy 获取完整路径,然后以某种方式通过所取路径获取控件?
谢谢
【问题讨论】:
标签: ui-automation white-framework microsoft-ui-automation
我正在使用 Microsoft UI 自动化 + White 框架。是否可以从顶级父控件获取 完整路径,然后使用它来查找元素?比如,使用 UI spy 获取完整路径,然后以某种方式通过所取路径获取控件?
谢谢
【问题讨论】:
标签: ui-automation white-framework microsoft-ui-automation
我使用 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。
【讨论】:
我过去做过一些类似于您正在尝试做的事情。不幸的是,这并不一定那么容易做到。
我基本上构建了我自己的 UI Spy 简化版本,它使用了一些类似于上面@chrismead 答案中的代码来构建自动化 ID 的“\”分隔路径(不幸的是,正如您可能已经发现的那样,AutomationID 可以是不可靠的,因此为了稳健性,我还必须添加通过名称、兄弟之间的位置或相对于父级的位置来识别 AutomationElements 的功能。
然后,我在另一个应用程序中有代码,可以将这些路径作为输入,以便定位那些特定的 AutomationElement 并与它们进行交互。
【讨论】: