問題タブ [microsoft-ui-automation]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - UI オートメーションが Telerik コントロールを追跡しない
すべてのアプリケーション レベルと制御イベントを記録するアプリケーションを作成しています。私はホワイト レコーダー フレームワークを使用しています。テレリック ベースではない他のコントロールをトレースできます。System.Windows.Control クラスから派生しているため、テレリック コントロールがトレースされない理由を知りたいです。
UI オートメーション要素を使用してすべての Telerik コントロールを追跡する方法はありますか? どうすればこれを達成できるでしょうか?
c# - UISpyとUIAは、同じプログラムで異なるプロパティ値を表示することを確認します
テストしているプログラムで、ある時点で閉じるボタンが有効になっていて、別の時点で無効になっているプログラムがあります。UISpyは、両方のポイントで「isEnabled」を「true」と表示しますUIAVerifyは、最初のポイントで「isEnabled」を「true」と表示し、2番目のポイントで「false」を表示します
後者は私が視覚的に真実であることを確認できるものであり、プログラムでUISpyと同じ値を取得していて、テストケースは失敗しています。
System.Windows.Automationを使用します。
ツリー構造:「ダイアログ」「プログラム名」「タイトルバー」「プログラム名」「ボタン」「閉じる」
誰かがこれを引き起こしている可能性があることを知っていますか?UIAベリファイはUISpyとは異なるライブラリを使用しますか?
c# - WPF での UI オートメーション
WPF で UI オートメーションを行う方法を教えてくれる人はいますか? グリッドの動作を確認したい。
c# - UI以外の自動化要素を含む任意のウィンドウの選択されたテキストを取得することは可能ですか?
UI以外の自動化要素を含む任意のウィンドウの選択されたテキストを取得することは可能ですか?プロセスの現在フォーカスされている要素の現在のコンテンツの選択されたテキストを取得できるようにしたい。
UIオートメーションを使用してこれを行うさまざまな例を見てきましたが、これは、.NETで最近開発されたアプリケーションのように見える特定のアプリケーションでのみ機能します。任意のウィンドウのテキストを取得できる必要があります。
しばらく前に、辞書のように動作するアプリケーションを覚えています。このアプリケーションでは、Windowsの任意の場所でマウスを使用してテキストにカーソルを合わせると、定義付きのツールチップが表示されます。これはC#と.NETで実現できますか?
WinSpyを使用して、UIAで機能していないように見えるウィンドウのコンテンツを検査してきましたが、ApplicationIdが空または「」として表示されます。この特定の要素はUIAでサポートされていないと思います。また、Notepad ++でテストしたときに、Scintillaを使用していることに気付きました。これもUIAでは再生されないようです。
おそらく、誰かが他の方法でこれを行うための信頼できる方法を示すことができれば、私は自分のアプリにハイブリッドアプローチを使用することができます。UIAフレームワークを使用します。これで結果が得られない場合は、他の方法に戻ります。
c# - WindowsUIオートメーションAPI
私はしばらくの間これを理解しようとしてきましたので、どんな助けでも大歓迎です。クライアントでUIオートメーションを使用して、別のアプリケーション内のユーザー選択を監視およびレポートしています。サーバー2003でコードが完全に機能するようになりました。ただし、サーバー2008では、監視しているコントロールがデータグリッド内のアイテムまたはリストとして報告されています。これは非常にランダムであり、コントロール内の行を選択し続けると、最終的にコントロールがデータグリッドとして報告されることに気付きました。サーバー2003では、常にデータグリッドとして報告されていたため、私のコードは完全に機能します。
Visual Studio 2010 C#で開発しています。
アップデート:
UIスパイツールを使用しても同じ結果が得られたため、この特定のケースではソースコードは関係ありません。
c# - AutomationElement: キャッシュされた要素 (GetCachedChildren 経由) から「ライブ」要素へ
100 を超える多くの要素を持つリスト (コンボボックスの標準) を含む ComboBox があります。特定のエントリを見つけて選択したいと考えています。エントリを見つけるために、特定のパターンを各要素の名前と比較します。
パフォーマンス上の理由 (100 を超える要素) から、すべての子のスコープを持つ親で CacheRequest を使用しているため、すべての子を適切かつ非常に迅速に調べて、選択したい子の正しいインデックスを見つけることができます。
ここで問題が発生します。必要な正しいインデックスがあり、キャッシュされた AutomationElement もありますが、CacheRequest で AutomationElementMode.None を指定したため (パフォーマンスに影響があるかどうかをまだテストする必要があります)、そうではないようです。キャッシュされた要素を、将来の呼び出しに使用できる要素 (「ライブ」要素) に変換できます。
NativeWindowHandle経由で変換してみました(AutomationElement.FromWindowHandleという関数があるので)が、ハンドルが0らしいのでこれは仕方ありません。
また、キャッシュされたSelectionPatternをまだ使用しようとはしていません.ComboBoxesはカスタムビルドされることがあるため、すべての場合に機能するかどうかはわかりません.
child-index があり、キャッシュできるすべての値を取得できます。キャッシュされた要素の動作中/ライブの AutomationElement を取得するにはどうすればよいですか?
ありがとうアンドレアス
(Windows 7 64でwin32アプリケーション(自動化ターゲットとして)でC#を使用しますが、大きな違いはありません)
c# - UIオートメーションをハングさせるモーダルダイアログ
WPFアプリケーションにUIオートメーションを実装しようとしていますが、モーダルダイアログが表示されると、ダイアログが手動で閉じられるまでUIオートメーションがハングします。
これまで、2番目のスレッドを使用してダイアログボックスを閉じ、アプリケーションをMTAスレッドを使用するように設定し、RaiseEventを使用してButton.ClickEventを使用してダイアログを閉じ、sendinputを使用してキープレスをダイアログに送信しようとしました。 。これらの方法はいずれも機能しておらず、他に試すべき回避策は見つかりませんでした。
誰かが可能な解決策を知っていますか?
c# - 将来の使用のためにAutomationElementsを(適切に)キャッシュする方法は?
私のテスト アプリケーションでは、常にフォームを開いたり開いたりしています。フォームが開かれるたびに、フォーム上のすべての要素を取得して、要素をAutomationElementCollection
操作できるようにする必要があります。ただし、これらの要素を繰り返し取得するのはコストがかかるようです (ツリー ナビゲーション/コンテキスト スイッチなどのため)。
要素を取得するメソッドの周りにブール値を設定しようとしました。メソッドが初めて呼び出された場合、メソッドは正常に実行され、ブール値が true に設定されます。メソッドが 2 回目に呼び出された場合、配列は既に設定されているため、何もしません。
ただしAutomationElement
、配列内の任意の操作を (2 回目) 実行しようとすると、要素が使用できないようです。フォームを閉じると、これらの要素が何らかの形で「無効」になりますか? フォームを開くたびにこれらの要素を見つけて、「新鮮」にする必要がありますか?
私は方法を見ましたCacheRequest
が、それは要素ではなく、プロパティ/パターンへのアクセスにのみ関係しているようです。
コード/エラーメッセージは次のとおりです。
System.Windows.Automation.ElementNotEnabledException: タイプ 'System.Windows.Automation.ElementNotEnabledException' の例外がスローされました。
white-framework - UIAutomation .NETを使用してデスクトップ上のすべてのウィンドウを見つける
.NET UIAutomation OR White フレームワークを使用して、すべてのデスクトップ ウィンドウを見つけようとしています。私は試した :
1.)
2.)
どちらも ArgumentException をスローします。他に方法があれば教えてください...
更新/回答: Desktop.Instance.Windows(); VS2010を使用してコードをデバッグしているときに例外がスローされることを除いて、正常に動作します。
google-chrome - ValuePatternのSetValueは、アドレス編集などのChromeブラウザのコントロールでは機能しません(例外がスローされます)
私はUIAを使用して、必要なテストのために、nativate、goback、goforwardなどのブラウザー(つまり、chrome、firefox)の操作を制御しようとしています。デモコードを書いてみましたが、問題が発生しました。Chromeのアドレス編集用のAutomationElementを入手し、ValuePatternを使用してURLを設定しようとしましたが、以下の例外が発生しました。
また、SetFoucusメソッドでも同じ例外が発生することがわかりました。win32メソッドを使用してメッセージを送信しようとしましたが、element.Current.NativeWindowHandleがnullであることがわかりました。しかし、ValuePatternの現在のプロパティから現在の値を確認できます。以下のメソッド()UiaRegisterProviderCallback(IntPtr.Zero);を呼び出すまで、UIAが最初にChromeのコントロールを見つけることができないアドレスの場合。
だから、それの理由はわかりません、そしてとにかくクロムの制御の値を設定することはありますか