私はいくつかのサードパーティ製コントロールのオートメーションプロバイダを実装していますので、VSコード化UIテストでアプリケーションのUIをテストできます。私はこれを行うためのUIオートメーションのアプローチを使用しています。標準検査ツールではうまく見えましたが、VSコード化されたUIテストビルダーを使用した場合、すべてのコントロールがテクノロジ名で(UIAではなく)MSAAとして扱われますので、ほとんどのプロパティが見落とされます。 VSコード化されたUIはUIAとして扱いましたか?ここ は、オートメーションプロバイダーを返すための私のコードです:VSコード化UIテストビルダーのカスタムコントロールで、MSAAからUIAにテストプロバイダを切り替える方法
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;
}
...
}
私はUIAモードで複雑な自動化ツールなどRanorexまたは単にInspect.exeを使用した場合には、このコードが呼び出されます。しかしVSでは、UiaRootObjectId要求はありませんでした。 代わりに、lParam == OBJID_CLIENT
パラメータでこれを呼び出します。したがって、デフォルトのMSAAプロバイダが返されます。誰かが同じ問題で立ち往生した場合には