使用UI Automation选择下拉列表不会保持下拉展开

时间:2015-08-18 14:52:37

标签: c# microsoft-ui-automation

我正在尝试选择一个下拉菜单,以便我可以使用Microsoft UI Automation选择Courier服务。

以下是我正在使用的代码

public void SelectCourierService(string courierService)
{
        Console.WriteLine(@"SelectCourierService(" + courierService + @")");

        var expandCollapsePattern = (ExpandCollapsePattern)_courierServiceCombo.GetCurrentPattern(ExpandCollapsePatternIdentifiers.Pattern);
        expandCollapsePattern.Expand();
        expandCollapsePattern.Collapse();

        var listItem = _courierServiceCombo.FindFirst(TreeScope.Subtree, new PropertyCondition(AutomationElement.NameProperty, courierService));
        listItem = AutomationElementHelper.GetSubtree(_courierServiceCombo, courierService);

        object selectionItemPattern;
        if (listItem.TryGetCurrentPattern(SelectionItemPattern.Pattern, out selectionItemPattern))
        {
            var selectPattern = (SelectionItemPattern)selectionItemPattern;
            selectPattern.Select();
        }

        Thread.Sleep(100);
 }

然而,当它到达以下代码时: -
expandCollapsePattern.Expand();

用户界面下拉菜单向下展开但随后折叠回来意味着我无法在下拉列表中选择项目。

我想知道是否有人遇到过同样的问题以及他们为解决这个问题做了什么。

谢谢

1 个答案:

答案 0 :(得分:2)

我的一位同事找到了这个解决方案的答案,我把它放在下面,这对我有用: -

public static void SelectDropdownItem(AutomationElement dropdownBox, string itemToSelect, bool navigateToParent = true)
{
        var expandCollapsePattern = (ExpandCollapsePattern)dropdownBox.GetCurrentPattern(ExpandCollapsePatternIdentifiers.Pattern);
        expandCollapsePattern.Expand();
        expandCollapsePattern.Collapse();

        var listItem = dropdownBox.FindFirst(TreeScope.Subtree, new PropertyCondition(AutomationElement.NameProperty, itemToSelect));

        if (navigateToParent)
        {
            var controlViewWalker = TreeWalker.ControlViewWalker;
            listItem = controlViewWalker.GetParent(listItem);
        }

        object selectionItemPattern;
        if (listItem.TryGetCurrentPattern(SelectionItemPattern.Pattern, out selectionItemPattern))
        {
            var selectPattern = (SelectionItemPattern)selectionItemPattern;
            selectPattern.Select();
        }
}