使用 UI 自动化选择下拉菜单不会使下拉菜单保持展开状态

Selecting drop down using UI Automation does not keep drop down expanded

我正在尝试 select 下拉菜单,以便我可以 select 使用 Microsoft UI 自动化的快递服务。

下面是我正在使用的代码

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();

UI 下拉菜单向下展开但随后又向上折叠,这意味着我无法 select 下拉列表中的项目。

我想知道是否有人遇到过同样的问题,他们是如何解决这个问题的。

谢谢

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

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();
        }
}