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.