1

最近、この記事から知りました-

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

-WPFのコントロールは、UIAアイテム自体を公開する責任があり、カスタムコントロールの新しく追加された機能は、対応するAutomationPeerクラスの実装を通じて公開されるまでUIAで使用できません。私の仕事では、多数のツールバーを使用するWPFアプリケーションのUIテストの自動化に割り当てられています。問題は、Microsoft UIオートメーションライブラリを介して、AutomationElementsとしてツールバー(明らかにカスタムコントロールとして開発されている)にアクセスできますが、その中のボタンにアクセスできないことです。子/子孫コレクションの数は常に0を返します。コード化されたUIテストを使用する場合、テストは常に失敗し、次のエラーメッセージが表示されます。

テストメソッドCAM2QDummyTest.CodedUITest2.CodedUITestMethod1が例外をスローしました:

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

TechnologyName:'MSAA'

名前:「標準」

ControlType:'ToolBar'

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

どうやら彼らは対応するAutomationPeerクラスを実装していませんでした。今、私はアプリケーションだけを持っており、ソースコードは持っていません。そのため、上記の記事で説明した方法で問題を解決することはできません。ツールバーの内側のボタンにアクセスするにはどうすればよいですか?どんな提案でもありがたいです。

4

1 に答える 1

3

どのパターンとプロパティサポートさAutomationElement.GetSupportedProperties()れているかを調べて、AutomationElement.GetSupportedPatterns()使用できる別のパターンがあるかどうかを確認できます。SelectionPatternボタンにアクセスできるリスト要素などがあるかもしれません。

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

いつでも (おそらく BoundingRectangleProperty によって) 座標を取得し、Win32 関数を使用して適切な場所でのマウス クリックをシミュレートできます。汚い。このスレッドが役立つかもしれません。

于 2011-02-09T12:49:34.350 に答える