2016-07-25 3 views
0

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

foreach (Process proc in Process.GetProcesses()) 
{ 
    if (proc.ProcessName.Contains(name)) 
    { 
     return true; 
    } 
} 

Однако процесс я хочу найти начинается около минуты, прежде чем приложение фактически открывает и готово к использованию методов испытания (его очень медленное стартовое приложение). В приведенном выше примере кода рассматриваются все запущенные процессы Windows, но мне интересно, есть ли способ сделать похожий метод, но смотреть на приложения Windows?

+1

В чем разница в вашем разуме между «процессами окон» и «приложениями окон»? – adv12

+0

Глядя на диспетчер задач, есть вкладка для обоих приложений и процессов. Процесс, который соответствует моему приложению, запускается и отображается в меню процессов прямо при щелчке по значку, однако приложение фактически не отображается в меню «Приложения», пока некоторое время спустя, когда окно действительно откроется.Я хочу убедиться, что это окно открыто. Не только, что процесс запущен. Я открыт для любого способа проверить это. –

+0

@Nate winforms или WCF? – BWA

ответ

0

uITestControl.Exists сделал трюк для меня.

Этот метод возвращает логическое значение, соответствующее открытию окна приложения. Это позволяет создать оператор if, который может открыть приложение, если он еще не открыт, или ничего не делать, если он уже открыт.

+1

Хотя этот фрагмент кода может решить вопрос, [включая объяснение] (// meta.stackexchange.com/questions/114762/explaining-entirely-code-based-answers) действительно помогает улучшить качество вашего сообщения. Помните, что вы отвечаете на вопрос читателей в будущем, и эти люди могут не знать причин вашего предложения кода. Также попробуйте не толковать код с пояснительными комментариями, так как это уменьшает читаемость кода и объяснений! – FrankerZ

0

Выполняется. Если вы можете изменить приложение, при запуске приложения вы можете создать файл и в конце удалить его. Таким образом, вы можете chceck file existance. Если файл существует, приложение запускается/запускается.

Если вам нужна информация, когда главная форма создается польза:

WINFORMS Form.Shown событий.

WPFLoaded Event

+0

Это будет работать для меня, однако, мне нужно убедиться, что приложение полностью загружено и готово к использованию до этого. Это проблема, которую я пытаюсь решить. Надеюсь, что это имеет смысл. –

2

Существует метод уже в классе Процесса, который вы можете использовать, чтобы проверить, если приложение с интерфейсом полностью начал:

Process.WaitForInputIdle(int milliseconds)

Это подожди до milliseconds мс для цикла сообщения, чтобы он простаивал (и возвращает bool для указания статуса успеха). В зависимости от приложения, которое вы ожидаете, вы можете разрешить 30 секунд или дольше.

Это может работать для вас, но имейте в виду, что в моем опыте для некоторых приложений это не совсем так!

У Windows API documentation есть более подробная информация о функции Windows API, которую WaitForInputIdle() вызывает за кулисами.

+0

Есть ли какие-либо для меня проверить, готов ли процесс к вводу пользователя? Вместо того, чтобы ждать, пока он будет готов? Что, если он уже готов? –

+0

@Nate 'WaitForInputIdle()' Устанавливает, что он готов для ввода пользователем. И если он уже готов, 'WaitForInputIdle()' немедленно возвращается. Вы прочитали документацию по ссылкам, которые я опубликовал в ответ? –

+0

То, что я искал, это «uITestControl.Exists». С этим я могу сделать 'if (uITestControl.Exists == true) {// Приложение готово к использованию} else {// Приложение не готово}' Вам просто нужно убедиться, что 'uITestControl' является частью приложение, которое будет активным только при запуске приложения. Спасибо за помощь! –

1

Когда процесс запускается, вы можете сказать, что приложение запущено. Вы хотите дождаться завершения хода запуска приложения или нет.

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

Programmatically, how does this application detect that a program is ready for input

+0

Это ближе к тому, что я ищу, но как я могу использовать это, чтобы проверить, действительно ли приложение уже готово для ввода пользователем. Есть ли логический атрибут, который я могу проверить, так что я могу сказать, 'если (InputIdle == верно) { // Сделайте что-нибудь } еще // Открыть application' –

+0

Согласно [это] (HTTP://stackoverflow.com/q/1404658/6170142), как правило, невозможно обнаружить, так как вы спрашиваете, готово ли какое-либо стороннее приложение для ввода пользователем. Посмотрите на вопрос [this] (http://stackoverflow.com/q/1404658/6170142). –

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