Как найти окно по заголовку переменной с помощью фреймворка TestStack.White?

Я использую платформу TestStack.White для автоматизации открытия нового документа в MS Word 2013.

Я открываю приложение Microsoft Word с помощью:

   Application application = Application.Launch("winword.exe");

После этого я пытаюсь получить окно по частичному заголовку:

   Window window = application.GetWindow("Word", InitializeOption.NoCache);

Но выдает исключение, говорящее, что такого окна нет.

Заголовок окна: Документ1 - Word.

Вопрос: Как получить окно по частичному заголовку, учитывая, что заголовок каждый раз меняется: "Документ2 - Word", "Документ3 - Word" и т.д.

Также попробовал * Word, но похоже, что эта функция не поддерживает подстановочные знаки.

Если я вызываю: List windows = application.GetWindows(); после запуска приложения список окон пуст.

Заранее спасибо, Остап


person Ostap Elyashevskyy    schedule 30.10.2014    source источник


Ответы (2)


Вы можете использовать EnumWindows, чтобы найти все открытые окна.

В этом обратном вызове вы получите дескриптор окна, который затем можно использовать с помощью GetWindowTextLength. и GetWindowText

Это позволит вам решить, какой дескриптор окна должен быть для окна, которое вы хотите. Оттуда вы можете использовать GetWindowThreadProcessId, чтобы получить идентификатор процесса для документа Word.

И, наконец, вы можете создать приложение TestStack White, используя Application.Start().

person MikeJ    schedule 01.05.2015

Похоже, открытие окна занимает заметное время. Среды тестирования GUI часто имеют такие функции, как Wait(), чтобы убедиться, что окно уже создано/видимо/включено. Я не эксперт в Teststack.White. Возможно, этот документ может помочь: http://teststackwhite.readthedocs.io/en/latest/AdvancedTopics/Waiting/

person Vasily Ryabov    schedule 01.11.2014
comment
Ожидания не помогают, окно не найдено через 30 секунд. Пробовал искать по заголовку который 100% на скрине. Также пробовал спать в течение 10 секунд перед поиском окна. - person Ostap Elyashevskyy; 06.11.2014
comment
Хорошо, это Майкрософт. :) Как насчет использования интерфейса COM-взаимодействия и объектной модели Word? msdn.microsoft.com/en-us/library/kw65a0we.aspx - person Vasily Ryabov; 06.11.2014
comment
Другой более конкретный пример: msdn.microsoft.com/ en-US/library/ms173188(v=vs.80).aspx - person Vasily Ryabov; 06.11.2014
comment
Спасибо за ответ. Microsoft COM работает для собственных элементов управления/рабочих процессов. В моем случае у нас есть плагин MS Word, который перехватывает и заменяет диалоги/элементы управления MS и т. д. Необходимо проверить, будет ли он обрабатывать такие элементы управления. - person Ostap Elyashevskyy; 07.11.2014