2011-02-09 16 views
1

は最近、私はこの記事から知るようになった - WPFでAutomationPeerクラスを実装していないWPFカスタムコントロールの内部要素にアクセスする方法は?

http://blogs.msdn.com/b/patrickdanino/archive/2009/11/11/custom-controls-and-ui-automation.aspx

- つまりコントロールはUIAのアイテムそのものを露出させるための責任がある、とカスタムコントロールの任意の新しく追加された機能は、UIAには使用できません対応するAutomationPeerクラスの実装を通じて公開されるまで私の仕事では、多数のツールバーを使用するWPFアプリケーションのUIテストの自動化に割り当てられました。問題は、Microsoft UI Automation Libraryを介してAutomationElementsと同様にToolBars(カスタムコントロールとして開発されているようです)にアクセスできますが、その中のButtonsにはアクセスできません。Count of Children/Descendant Collectionは常に0を返します。 、テストは常に失敗し、次のエラーメッセージを示しています。例外をスロー

試験方法 CAM2QDummyTest.CodedUITest2.CodedUITestMethod1を:

Microsoft.VisualStudio.TestTools.UITest.Extension.FailedToPerformActionOnBlockedControlException: 別のコントロールでありますコントロールをブロックします。 ブロックされた コントロールを表示させ、アクションを再試行してください。 追加詳細:

TechnologyName: 'MSAA'

名:[標準]

ControlType: 'ツールバー'

---> System.Runtime.InteropServices.COMException: 例外HRESULTから:0xF004F003

明らかに、彼らは対応するAutomationPee rクラス。さて、私はソースコードではなくアプリケーションだけを持っています。だから私は上記の記事で説明した方法で問題を解決することはできません。誰でも手掛かりを持って助けてくれますか?どのようにツールバーの内側のボタンにアクセスできますか?どんな提案も感謝しています。

答えて

3

あなたが使用できるさまざまなパターンがありますかどうかを確認するためにAutomationElement.GetSupportedProperties()AutomationElement.GetSupportedPatterns()経由をサポートされているパターンとプロパティを見て持つことができます。 SelectionPatternなどのリスト要素などがあり、ボタンにアクセスすることができます。

それ以外の場合は、ベンダーに連絡して、関連するピアを追加するよう依頼してください。

いつでも座標を得ることができます(おそらくBoundingRectanglePropertyによって)Win32関数を使用して、適切な場所でマウスクリックをシミュレートします。不快な。 This threadが役に立ちます。

+0

THANKS a lot Lunivore。間違いなくGetメソッドを最初に試してみるつもりです。しかし、私が座標のアプローチに従わなければならない場合、ボタンのマウスクリックだけをシミュレートする以外に、テキストボックスやコンボボックスと通信できる方法はありますか?私のツールバーの中には、それらも含まれています:-( – atiyar

+2

あなたはUISpyを試してみることができますが、それは何かを考え出すことができますが、あなたのツリーが空でないと思われます。実際にオートメーションピアを正しく実装してください - それはとても重要です! – Lunivore

+0

まあ、私は死んで終わりを見ます。UISpy、Spy ++、コード化されたUIテストビルダー、Inspect - すべてがToolBarsより深くなっています。とにかく、あなたの時間のおかげでルーニ。 – atiyar

関連する問題