如果我只知道CodedUI中的AutomationId的一部分,我如何找到控件

时间:2015-04-10 09:54:19

标签: c# microsoft-ui-automation

我试图找到一个类似于AUTO1.1.2.2.2_Status的控件.... 状态之前的部分可能会发生变化那么我应该如何通过搜索状态来找到它。 我试过这个但是不对。

   uIWpfImage.SearchProperties[WpfImage.PropertyNames.AutomationId].Contains(controlPropertiesList[2]);

请帮助!!!

1 个答案:

答案 0 :(得分:0)

你可以获取所有自动化元素(通过treewalker或findall)&将它们存储到collection。然后迭代集合检查 automationId contains 所需的自动化ID。

Tbh我认为这个解决方案在性能方面并不是最优的,因为在检查属性之前,您需要先存储集合。可悲的是,我还没找到更好的解决方案。


编辑: 以上答案主要关注UI Automation Core而不是Coded UI: 对于编码用户界面,您可以尝试以下方式:

    control.SearchProperties.Add(
        // take some identical property here, matching all possible
        // controls (e.g. PropertyNames.Name; if that property is
        // the same for all your Images)
    );

    UITestControlCollection controlcollection = control.FindMatchingControls();
    foreach (UITestControl x in controlcollection)
    {
        if (x is WpfImage)
        {
              // cast the WpfControl to an AutomationElement
             AutomationElement temp = (AutomationElement)x;
             string automationId = temp.GetCurrentPropertyValue(
                 AutomationElement.AutomationIdProperty) as string;

             if(automationId.contains("_STATUS"))
             {
                 // go on..
             }
         }
    }