Самое первое, что вы должны сделать - это пообщаться с разработчиками на предмет того как вы сможете достучаться к контролам WTL-based приложения. Без их помощи в этом вам не поможет ни один бесплатный инструмент. Я не сталкивался TestComplete, но смотрел Ranorex - с его помощью, можно достучаться даже контролов QT-based приложения. По поводу WTL: возьмите свое приложение и пройдитесь по нему spy++ или тем же UI Automation Verify - до многих контролов вы сможете достучаться? Если вы ранее с этим не сталкивались, приведу маленький пример: приложение kPad - WTL-based апликуха - блокнот. Если пройтись по ней спаем, то можно достучаться до следующих контролов:
много вы натестите методом черного ящика приложение, имея доступ к нескольким контролам? В этом случае вам не поможет win32 api, которое , в принцыпе, и используется всякими pywinauto и другими приблудами (отдельный случай Ranorex - там свой spy и инструменты, но и стоит он не дешево)
Если приложение еще в начальной стадии разработки и разработчики смогут сделать для вас изменения, то первое о чем с ними договоритесь - это пусть они задают имя для каждого окна. В этом случае , используя win32, можно дергать конкретный контрол, что не всегда возможно без этого (я имею ввиду без имени окна).
Пример тут же можно посмотреть на скриншоте:
парент “” ToolbarWindow32
чайлды: “” ATL:004166E0 - два
их чайлды: “” Edit
или
парент: “” kSheetsCtrl
чайлды: “” ATL:SCROLLBAR - два
здесь пример простого приложения, так что в иерархии контролов могут быть десятки, например, “” ATL:004166E0 с одим парентом, и используя те же FindWindowEx или EnumChildWindows вы просто получите список хэндлов контролов одинакого класса.
А будет это unittest или nunit, или еще что-то , например, решите использовать java с библиотекой jna, которая позволяет мапить и вызывать Win32 API, с junit (или testng) - это не важно, это всего лишь тестовый фреймоврк.