Интересная проблема! Я давно не занимался низкоуровневым (думаю, Win32) программированием Windows, но вот что я хотел бы сделать.
Используйте именованный канал и пусть ваше приложение прослушивает его. Используя этот именованный канал в качестве средства связи, реализуйте действительно простой протокол, с помощью которого вы можете запросить у приложения имя элемента управления, учитывая его HWND, или другие вещи, которые вы считаете полезными. Убедитесь, что протокол достаточно богат, чтобы обменяться достаточным количеством информации между вашим приложением и тестовой средой. Убедитесь, что тестовый фреймворк не выдает слишком много «особого поведения» из приложения, потому что тогда вы на самом деле не будете тестировать функции, а скорее свой тестовый фреймворк.
Вероятно, есть более элегантные и более крутые способы реализовать это, но это то, что я помню из головы, используя только простые вызовы Win32 API.
Другой подход, который мы реализовали для нашего продукта на работе, заключается в записи пользовательских событий, таких как щелчки мыши и ключевые события, в сценарии событий. Это должно быть достаточно полно, чтобы приложение могло воспроизводить его, искусственно вставляя эти события в очередь сообщений, и вести себя так же, как при первой записи сценария. Вы в основном симулируете пользователя при воспроизведении сценария.
Кроме того, вы можете записывать любое важное состояние (документ пользователя, настройки, иерархия элементов управления графическим интерфейсом и т. Д.), Один раз при записи сценария и один раз при его воспроизведении. Это дает вам два набора данных, которые вы можете сравнить, чтобы убедиться, например, что все остается одинаковым. Это решение предоставляет вам тесты, которые нелегко изменить (вам нужно перезаписать, если ваш GUI изменится), но которые предоставляют потрясающее регрессионное тестирование.
(РЕДАКТИРОВАТЬ: Это также потрясающий инструмент контроля качества во время бета-тестирования, например: просто пусть ваши пользователи записывают свои действия, и в случае сбоя у вас есть хороший шанс легко воспроизвести проблему, просто воспроизведя сценарий. )
Удачи!
Карл