2016-04-18 3 views
3

私はいくつかのサードパーティ製コントロールのオートメーションプロバイダを実装していますので、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プロバイダが返されます。誰かが同じ問題で立ち往生した場合には

UI Control Map snapshot

答えて

0

、ここで私が見つけたソリューションです。コントロールのクラス名(これはVSプラグインの.dllまたはこのようなものである必要があります)に使用されるカスタムサーバー側プロバイダを作成する必要があります。

カスタムプロバイダ.dllは、Visual Studioディレクトリに配置する必要があります。その後、VSコード化されたUIプラグインのすべてのコントロールには、独自に記述したテクノロジ名、フィールド、ロールが設定されます。カスタムプロバイダーの例は、msdnおよびその他のリソースにあります。

関連する問題