2016-04-18 7 views
3

Ich implementiere Automatisierungsanbieter für einige Steuerelemente von Drittanbietern, sodass ich die Benutzeroberfläche meiner Anwendung mit VS-codierten ui-Tests testen kann. Ich verwende dafür den UI-Automation-Ansatz. In Standardinspektionstools sahen sie gut aus, aber wenn ich den VS-codierten UI-Test-Builder verwendete, wurden alle meine Steuerelemente als MSAA im Technologie-Namen (anstelle von UIA) behandelt, sodass die meisten meiner Eigenschaften übersehen wurden. Was soll ich tun, damit VS Coded UI es als UIA behandelt? Hier ist mein Code Automatisierungsanbieter für die Rückgabe:So wechseln Sie den Testanbieter von MSAA zu UIA in benutzerdefiniertem Steuerelement für VS Coded UI Test Builder

LRESULT CALLBACK ControlWndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) 
{ 
    switch (message) 
    { 
    case WM_GETOBJECT: 
     { 
      // If the lParam matches the RootObjectId, send back the RawElementProvider 
      if (static_cast<long>(lParam) == static_cast<long>(UiaRootObjectId)) 
      { 
       CustomButton* pControl = reinterpret_cast<CustomButton*>(GetWindowLongPtr(hwnd, GWLP_USERDATA)); 
       IRawElementProviderSimple* pRootProvider = pControl->GetUIAutomationProvider(); 
       return UiaReturnRawElementProvider(hwnd, wParam, lParam, pRootProvider); 
      } 

      return 0; 
     } 
    ... 
} 

Dieser Code wird aufgerufen, wenn ich komplexes Automatisierungswerkzeug, wie Ranorex verwendet oder einfach Inspect.exe mit UIA-Modus. Aber mit VS gab es keine UiaRootObjectId Anfrage. Stattdessen nennt man das mit lParam == OBJID_CLIENT param. So gibt es einige Standard-MSAA-Anbieter zurück.

UI Control Map snapshot

Antwort

0

Im Fall, dass jemand mit dem gleichen Problem stecken, hier ist eine Lösung, die ich gefunden habe. Sie sollten Ihren benutzerdefinierten serverseitigen Provider erstellen, der für den Klassennamen Ihrer Steuerelemente verwendet wird (es sollte VS-Plug-in-DLL oder etwas ähnliches sein).

Ihr benutzerdefinierter Anbieter .dll sollte in Ihrem Visual Studio-Verzeichnis abgelegt werden, danach haben alle Ihre Steuerelemente im VS-codierten ui-Plugin den Technologie-Namen, Felder und Rollen, die Sie selbst beschrieben haben. Beispiel für einen benutzerdefinierten Anbieter finden Sie unter msdn und anderen Ressourcen