2016-01-30 2 views
0

Я пытаюсь использовать библиотеку System.Windows.Automation для выполнения некоторых тестов пользовательского интерфейса и смог добиться определенного прогресса, но я не могу подписаться на событие создания всплывающее окно в моем приложении. Я попытался использовать Automation.AddStructureChangedEventHandler на корне (рабочий объект), а также на окне, но это не сработало. Я также пробовал использовать разные области, что тоже не помогло.Как подписаться на открытие всплывающего окна в System.Windows.Automation

AutomationElement desktop = AutomationElement.RootElement; 
AutomationElement app = desktop 
    .FindFirst(TreeScope.Children, 
     new PropertyCondition(AutomationElement.NameProperty, 
      "Name of the App", PropertyConditionFlags.IgnoreCase)); 

ActivateWindow(app); 

AutomationElement appWindow = app 
    .FindFirst(TreeScope.Children, 
     new PropertyCondition(AutomationElement.ControlTypeProperty, 
      ControlType.Window)); 

// Find a button that opens a popup window and click it 
AutomationElement button = appWindow 
    .FindFirst(TreeScope.Children, Condition.TrueCondition) 
    .FindAll(TreeScope.Children, Condition.TrueCondition)[8]; 

MoveMouseToAndClick(button); 

Automation.AddStructureChangedEventHandler(desktop, TreeScope.Descendants, setupWindowOpen); 

В setupWindowOpen обработчик срабатывает иногда, но, похоже, что происходит в других приложениях, а не мой (я вижу иды Internet Explorer на объекте элемента отправителя). Спасибо заранее.

ответ

0

Элементы управления всплывающим меню сложны, поскольку они могут быть расположены либо непосредственно под рабочим столом, либо под вашим приложением, или, возможно, где-либо еще (прямое дочернее приложение рабочего стола лучше всего догадается). Я предлагаю вам использовать утилиту WinSDK_AccEvent.exe, поставляемую с SDK от Microsoft, чтобы протестировать поведение всплывающего окна с помощью различных событий, таких как: WindowOpened, StructureChanged, ToolTipOpened на рабочем столе и в вашем автоматизированном приложении. Это должно дать вам правильные события, чтобы подписаться на них и в какой области. Важное примечание: Если вы используете управляемую версию инфраструктуры автоматизации пользовательского интерфейса, лучше всего перейти на родную версию, так как управляемая имеет ограничения на то, что она может захватить, и несколько ошибок производительности, которые невозможно преодолеть. По-видимому, он официально не поддерживается официально. Надеюсь это поможет.

Смежные вопросы