2015-08-18 1 views
0

Я пытаюсь выбрать раскрывающееся меню, чтобы я мог выбрать курьерскую службу с использованием Microsoft UI Automation.

Ниже приведен код, в котором я используюВыбор выпадающего списка с помощью UI Automation не продолжает раскрываться.

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

Пользовательский интерфейс выпадающее меню расширяется вниз, но затем падает обратно смысла что я не могу выбрать элементы в раскрывающемся списке.

Мне было интересно, есть ли у кого-то такая же проблема и что они сделали, чтобы решить эту проблему.

Благодаря

+0

Я могу missunderstand вас, но вы получили ExpandCollapsePattern. Collapse(); после вашего расширенияCollapsePattern.Expand(); - это специально ?! (если нет, удалите его и повторите попытку :)) Вы имеете в виду, что он разрушается до 1000 мс в вашей Thread.sleep(); закончиться? – Hansa

+0

@ Ханса Я удалил expandCollapsePattern.Collapse(); это все равно не движется. Я создал скринказу, чтобы показать вам, что происходит: - http://screencast-o-matic.com/watch/cojrlCfBEF – ChrisMcLellan

ответ

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(); 
     } 
} 
Смежные вопросы