2012-02-17 5 views
0

Я пытаюсь автоматизировать выбор меню с помощью Microsoft UI Automation.UIAutomation - Strange ExpandCollapse Behavior

Приложение, для которого я настроен, является приложением Windows, которое включает встроенный браузер. Приложение имеет панель меню с элементами меню «Файл», «Редактировать» и т. Д.

Машина, на которой я запускаю автоматизацию, является машиной Windows XP.

Вот код, я использую, чтобы развернуть пункт меню Файл:

AutomationElement aeMenuBar = 
      aeFormElement.FindFirst(TreeScope.Children, new PropertyCondition(AutomationElement.ControlTypeProperty, ControlType.MenuBar)); 


     AutomationElement aeFileItem = 
      aeMenuBar.FindFirst(TreeScope.Descendants, new PropertyCondition(AutomationElement.NameProperty, "File")); 


     ExpandCollapsePattern fileECPattern = aeFileItem.GetCurrentPattern(ExpandCollapsePattern.Pattern) as ExpandCollapsePattern; 
     fileECPattern.Expand(); 

я получаю InvalidOperationException, когда я ударил метод Expand().

Я не могу понять, что вызывает исключение. ExpandCollapseState fileECPattern Collapsed, который, я считаю, верен (другими словами, это не LeafNode).

Одна вещь, которую я замечаю, является некоторым аномальным поведением в целевом приложении, когда я просматриваю его с помощью UI Spy. В частности, если в UI Spy я выбираю пункт меню File, «Scope to Element», затем запускает метод Expand, меню File не расширяется. Вместо этого появляется пункт меню next в Файл (т. Е. Редактировать). Такое же поведение происходит и с другими пунктами меню. Это не происходит, когда я меняю приложения (например, Microsoft Paint) - там все работает нормально.

На каком-то базовом уровне элементы меню в моем целевом приложении просто не кажутся хорошо воспроизводимыми с помощью UI Automation и UI Spy.

Любые предложения относительно того, почему бы и нет было бы весьма полезно.

ответ

1

Строки меню в некоторых приложениях сложны; они часто представляют собой просто панель инструментов панели инструментов toolbarwindow32, где приложение будет вызывать TrackPopupMenu для отображения подменю при нажатии пункта меню - и фактически нет реальной связи между выпадающим меню и панелью меню, кроме строки или двух кода в приложении. UIAutomation делает «наилучшую попытку» при создании Expand/Collapse для меню, о котором он знает (например, тип User32, который вы находите в блокноте Pre-Win7), но не всегда работает в другом месте.

Резервные копии, которые вы можете попробовать: посмотрите, работает ли Invoke как способ создания подменю; в противном случае попробуйте получить кликабельную точку и щелкните мышью в этой позиции (используя SendInput).

+0

Спасибо за информативный ответ. Я сделаю снимок в подходе Invoke. Я несколько опасаюсь полагаться на положение мыши, так как я предполагаю, что это повлияет на конкретный монитор, который использует пользователь. – Steve