問題タブ [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.
automation - ユーザー入力を自動的に入力するkshスクリプトをどのように記述しますか?
kshスクリプトでのユーザー入力を自動化する方法はありますか?
多くの場合、expectスクリプトを作成して、私が言っていることを正確に実行できますが、expectはサーバーにインストールされておらず、近い将来に発生する可能性はありません。しかし、ユーザー入力を自動化する方法がまだ必要なので、必要な反応はスクリプトを開始することだけです。
c# - WndProc(ref Message m)、ゲームの最小化の防止、キー ストロークの送信
概要:
ゲームやその他のアプリと連携するタッチ アプリケーションを作成します。この概念は、touch-buddy.comにあるアプリと似ていますが、Perl でアプリケーションを作成する代わりに、C# と WPF を使用します。
評価したい課題がいくつかあります。touch-buddy アプリは、ゲームを操作する際に 2 つのアプローチを使用します。
- クライアントモード (同じマシンでゲームとタッチバディの両方を実行)。
- 別のボックスがゲーム機にコマンドを送信するサーバー/クライアント モード。
私がこの方法を採用した理由は、ゲームの最小化に関する問題を回避するためでした。
クライアントのみのモードで、ゲームが表示されているメイン画面以外の画面をタッチすると、ゲームが最小化されるという問題に直面しています。すべてのゲームがこの動作をするわけではありませんが、最小化して防止するゲームを征服したいと思います.
ゲームを前面と中央に集中させ、C# WndProc(ref Message m) を使用して最小化を防ぐことは可能ですか?
Win フォームを作成したWndProc (ref Message m)を試してみました。自分の Win フォームで最小化を押すと、メモ帳のインスタンスが閉じます。これは、メッセージをキャプチャし、そのメッセージがバブルアップするのを防ぎ、メッセージを別のアプリケーションに送信できることを証明しています。次に、タッチスクリーンでメモ帳をクリックして、勝利フォームアプリケーションをフォーカスしたままにし、最小化しないようにしました。この時点で私は失敗しています。メッセージコードを理解するのにもっと時間が必要です。
これは正しいアプローチですか?それはできますか?Windows Automation などの他のライブラリを検討する必要がありますか?
キー入力は、私のもう 1 つの関心事です。キーストロークを他のアプリ/ゲームに送信する最良の方法は何ですか? DirectX を利用して、ある種の送信キー、Automation Framework を使用する必要がありますか? 一部のシミュレーション ゲームで必要となる複数のキー ストロークを処理できるものはありますか?
リンクや洞察をいただければ幸いです。何らかの理由でこの道を進んだ場合は、コメントをお待ちしております。
スタン
wpf - UI Automation Framework から WPF UserControl DependencyProperty の値を取得するにはどうすればよいですか?
UI オートメーション フレームワークを介して WPF UserControl DependencyProperty 値にアクセスできません。
MSDN の James McCaffrey の記事 (Automating IO Tests in WPF Applications, MSDN March 2009) を出発点として使用しましたが、ボタンなどの標準コントロールのプロパティなどしか表示できません。
UserControl に実装しなければならない Automation インターフェイスがあると仮定していますが、何をどのように実装するのでしょうか?
UISpy などでコントロールを正常に表示できますが、その中に依存関係のプロパティが表示されません。UISpy での現在のユーザー コントロールの外観は次のとおりです。
AutomationElement General Accessibility AccessKey: "" AcceleratorKey: "" IsKeyboardFocusable: "False" LabeledBy: "(null)" HelpText: "48v ファンタム電源のオン/オフを切り替えます (マイク入力のみ)。"
状態 IsEnabled: "True" HasKeyboardFocus: "False"
識別 ClassName: "" ControlType: "ControlType.Custom" Culture: "(null)" AutomationId: "V48SwL" LocalizedControlType: "custom" Name: "" ProcessId: "5684 (VirtualSix)" RuntimeId: "7 5684 40026340" IsPassword: "False" IsControlElement: "True" IsContentElement: "True"
Visibility BoundingRectangle: "(140, 457, 31, 20)" ClickablePoint: "155,467" IsOffscreen: "False"
コントロールパターン
c# - UI オートメーション コマンドレットがコントロールを見つけられない
MSFT が提供する UI オートメーション フレームワークを使用して WPF アプリケーションをテストしようとしています。アプリケーションのビジュアル コントロールを操作するために作成されたコマンドレットを呼び出す、いくつかの PowerShell スクリプトが作成されました。
アプリケーション内に「DropDownEntry」というエントリを持つドロップダウンがあります。私のコマンドレットでは、次のようにしようとしています:
上記のスニペットは、実行時に「null」を返します。これは、基本的に、上記のロジックがドロップダウン エントリを見つけることができなかったことを意味します。
なぜこれが起こっているのか誰か教えてもらえますか?コントロールの名前と値を確認しました。すべてが順調に進んでいるようです。なぜこれが起こるのかわかりません。どんな助けでも大歓迎です。
ありがとう
c# - UI オートメーション ボタン スタイルの有効化
次のボタンが定義された WPF アプリケーションがあるため、UI テスト用の UI オートメーションを評価しています。
ボタンを視覚的に無効にする必要がある場合は、スタイルを変更して、ボタンが無効になっていることをユーザーが認識できるようにします (色が変更されます) が、ボタンは内部的に有効になっているため、メッセージを表示するために OnClick イベントを起動できます。ユーザーが「無効」ボタンをクリックします。
問題は、現在適用されているスタイル、つまりボタンが無効か有効かを UI オートメーションから確認する方法がわからないことです。どうすればそれができるか知っていますか?
通常の状況では、次のようにする必要があります。
しかし、私の場合、ボタンは常に有効になっているため、ボタンに適用されているスタイルを確認する必要があります。
どうもありがとうございました。
よろしくお願いします
c# - UIAutomationを使用してMDI子ウィンドウのフォーカスを設定するにはどうすればよいですか
自動化する必要のある古いレガシーアプリケーションがあります。MDIウィンドウを使用します。
UIAutomationを使用しており、各MDI子ウィンドウに適切なAutomationElementを正常に取得できます。私にできないことは、その要素に焦点を当てることです。
これが私が試したいくつかのサンプルコードですが、失敗します:
このコードの最後の行はSystem.InvalidOperationExceptionで失敗します
実験して、childWindowでコントロールを見つけ、その上でSetFocusを呼び出してみました。正しいコントロールにフォーカスを正しく設定しましたが、MDIウィンドウを前面に表示しませんでした。
何か案は?
c# - Hudson が Process.Start を正しく実行していないようです
プロジェクトでは、C# でアプリケーションを起動し、プロセスに関連する AutomationElement ツリーを取り出し、アプリケーションを閉じてツリーを出力する必要があります。これを行うには、Process.Start を使用してアプリケーションを開きます。次に、生成されたプロセスに関連する AutomationElements を見つけ、TreeWalker と AutomationElement の FindFirst メソッドと FindAll メソッドを組み合わせてツリーをたどっています。
これは私のコンピューターで正常に動作し、ローカルで NUnit を使用して正しく動作します。また、私のグループのコンピューターの他の人でも実行されます。問題は、Hudson を実行している中央のテスト サーバーでは決して実行されないことです。数時間のデバッグの後、Hudson でアプリケーションを起動し、AutomationTree の最初のレベルを出力するテストを行いました。私のコンピューターでは、デスクトップにあるすべてのウィンドウが印刷されます。Hudson では、これはデスクトップのみを印刷します。
複数のデスクトップがあるのではないかと考えて、RootElement で TreeWalker の GetNextSibling 関数を使用してみました。まだ 1 つのデスクトップしか報告されていません。
プロセスを開始するために使用しているコードは次のとおりです。
sApplicationPath は、実行可能ファイルの絶対パスに設定されます。iInitialDelay は、アプリケーションが開始する時間を確保するための遅延です。これを Windows Vista SP2 の 'C:\Windows\System32\notepad.exe' で実行し、v3.5 C# コンパイラでコンパイルしています。
FindChildProcessById は次のように定義されます。
これは私のコンピューターでコンパイルして動作することを覚えておいてください。Hudson でのテスト プログラムでは、RootElement に子がまったくないことが示されました。
そのため、アプリケーションを起動し、存在することを確認しましたが、プロセスに関連付けられたウィンドウが見つかりません。デスクトップ以外に関連付けられたウィンドウが見つかりません。
これはハドソンの問題ですか?Hudson は、このコードが動作しない特定の方法で動作しますか? 私のコードに問題がありますか?Hudson サーバーは、Windows Server 2003 コンピューターで実行されています。どんな助けでも大歓迎です。これが非常に具体的な問題であることはわかっています。これが、オンラインで解決策が見つからない理由です。
wpf - 項目をグループ化する WPF ItemsControl で UI オートメーションを使用するにはどうすればよいですか?
Microsoft UI Automation (つまり) を使用AutomationElement
して、アプリケーションに対して自動受け入れテストを実行しています。これはうまくいきましたが、自動化フレームワークにさらされていないように見える状況に遭遇しました。
私はItemsControl
(その派生コントロールの 1 つを使用することもできますが、たとえばListBox
)を持っており、CollectionViewSource
項目をグループ化するために使用しています。デモ用の完全なウィンドウを次に示します。
これにより、カテゴリにグループ化されたアイテムを含むウィンドウが生成され、各アイテムには、UI オートメーションでクリックしたいボタンがあります。
(ソース: brizzly.com )
ただし、UISpy.exeを見る(または で移動するAutomationElement
) と、グループしか表示されません (Raw ビューであっても):
(ソース: brizzly.com )
ご覧のとおり、グループはありますが、アイテムが含まれていないため、ボタンを探す場所がありません。WPF 3.5 SP1 と WPF 4.0 の両方でこれを試しましたが、同じ結果が得られました。
グループ化されたアイテムで UI オートメーションを使用することは可能ですか?
cookies - WatirにCookieを明示的に追加する方法は?
特定のフローを実行するには、IE で Cookie を設定する必要があります。次のコードを使用してみました
ieb = Watir::IE.new
ieb.document.cookie="rememberme=foobar;Path=/; Domain=sometestdomain.com"
# Bring up browser and do bunch of stuff
ただし、IE が起動すると、rememberme cookie が設定されていないことがわかります。ここで何か間違ったことをしていますか?
c# - いくつかのメソッドのみが必要な場合に、巨大なC#COMインターフェイスラッパーの作成を回避する方法はありますか?
みなさん、こんにちは。
私は、Windows 7 Explorerの新しいItemsViewコントロールでホットアイテムのインデックスを取得できる必要があるC#プログラムに取り組んでいます。幸い、Microsoftは、コントロールのカスタムプロパティをクエリすることにより、UIオートメーションを介してこれを行う方法を提供しています。
残念ながら、System.Windows.Automation名前空間は、不可解にもカスタムプロパティをクエリする方法を提供していないようです。これにより、C#Automation名前空間を完全に破棄し、管理されていないCOMバージョンのみを使用しなければならないという望ましくない立場が残ります。これを行う1つの方法は、すべての自動化コードを別のC ++ / CLIモジュールに入れて、C#アプリケーションから呼び出すことです。ただし、プロジェクトにファイルが追加されるため、可能であればこのオプションは避けたいと思います。また、32/64ビットの問題などについて心配する必要があります。
もう1つのオプションは、ComImport属性を使用して関連するインターフェースを宣言し、COM相互運用機能を介してすべてを実行することです。これが私がやりたいことです。ただし、IUIAutomationやIUIAutomationElementなどの関連するインターフェイスは、非常に大きなものです。それらには合計で数百のメソッドがあり、参照トンとトンのインターフェース(私も宣言する必要があると思います)があり、そのほとんどすべてを使用することはありません。UIオートメーションインターフェイスもタイプライブラリで宣言されていないと思うので、TLBIMPを使用できません。
バジリオンのメソッドシグネチャを手動でC#に変換する必要がなく、代わりに実際に必要な10個程度のメソッドのみを宣言する方法はありますか?C#4.0では、COMの相互運用を容易にするはずの新しい「動的」タイプが追加されたことがわかります。それは私の問題にまったく関係がありますか?
ありがとう