Как включить кнопку с помощью UIAutomation или White

Я пытаюсь автоматизировать мастер установки, и мне нужно нажать на неактивную кнопку.

Я знаю, что это можно сделать с помощью сообщений Windows, но мне было интересно, есть ли уже поддержка для этого в White или UIAutomation.

Для справки это не работает:

var invoke =  (System.Windows.Automation.InvokePattern)setup.button("Next >").AutomationElement.GetCurrentPattern(System.Windows.Automation.InvokePattern.Pattern);  
invoke.Invoke();

и это не

var guiAutomation = new API_GuiAutomation("msiexec");  
var setup = guiAutomation.windows()[0]; 
setup .bringToFront(); 
setup .button("Next >").mouse().click();  // this will work
setup .button("Next >").mouse().click();  // this will not work since the button is not enabled

В приведенном выше примере используется API на основе White, который я добавил к платформе O2 (см. здесь пример автоматизации блокнота)


person Dinis Cruz    schedule 15.03.2011    source источник


Ответы (4)


Я не верю, что вы можете сделать это с помощью UIAutomation: то, о чем вы просите, выходит за рамки компетенции UIAutomation. Он предназначен для того, чтобы вы могли делать с кодом то же, что и с мышью и клавиатурой. Он не предназначен для общего управления состоянием пользовательского интерфейса.

person Samuel Jack    schedule 15.03.2011
comment
Что ж, изменение состояния элементов управления пользовательского интерфейса (например, кнопок) — довольно полезная возможность тестирования/автоматизации :) - person Dinis Cruz; 17.03.2011

Вы можете напрямую вызвать функцию Win32 EnableWindow, которая отправляет сообщение Windows, как вы сказали.

Я искал эту функциональность в UIAutomation, но не нашел.

person Andreas Reiff    schedule 14.06.2011

Нажатие на включенную кнопку скорее связано с методами внедрения ошибок, чем с нормальным выполнением приложения. Эта кнопка отключена до конца жизненного цикла приложения или будет включена позже? Если второе, то почему бы не дождаться включения? Используя do/while для element.Current.IsEnabled или командлет Wait-UIAButton.

person Alexander Petrovskiy    schedule 19.04.2012

Если вы используете белый

Mouse.Instance.Location = this.ClickablePoint;

Мышь.ВлевоВниз(); Mouse.Instance.Location = точка; Мышь.ВлевоВверх();

person Matware    schedule 16.06.2011
comment
O2 использует белый цвет для автоматизации окон. Кстати, ваш пример кода не будет работать, так как кнопка не включена - person Dinis Cruz; 10.07.2011