問題タブ [uia]

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.

0 投票する
1 に答える
779 参照

ui-automation - Microsoft UIAutomation ライブラリを使用して編集ボックスを「クリック」できますか

私のアプリケーションには、webbrowserpageviewer コントロールがあります。Web ページが開かれると、ユーザーは Web ページにあるいくつかの編集ボックスをクリックする必要があります。UI オートメーション ライブラリを使用して、この動作をシミュレートしようとしています。これには少し慣れていませんが、InvokePattern を使用してボタンのクリックをシミュレートできることがわかりました。編集ボックスのクリックをシミュレートする同様の方法はありますか?

0 投票する
1 に答える
526 参照

session-0-isolation - セッション 0 での UI オートメーション

UIA を使用してアプリケーションを自動化しようとしています。テスト段階では、psexec を使用してリモート サーバー上でアプリケーションを実行し、セッション 0 で開始します。

そうするとき、セッション 0 デスクトップに切り替えるまで、アプリケーションの子の一部を自動化できません (対話型サービス検出メッセージから)。

TreeWalker を使用してアプリケーションのツリー全体を反復処理するコードをいくつか追加しました。非表示のセッション 0 では一部の子のみが作成され、インタラクティブ デスクトップ (セッション 0 またはその他) ではすべての子が作成されることがわかります。

この問題に関するドキュメントは見つかりませんでした。

助言がありますか?

0 投票する
1 に答える
97 参照

ruby - dragFromToForDuration メソッドで使用される座標の変数を参照する方法

左にスワイプして画面から多数のレコードを削除する簡単なルーチンがあります。特定の状態、つまり送信準備ができているレコードのみを削除します。一番上のレコードは必ずしもその状態にあるとは限らないため、固定の y 座標は使用できません。代わりに、その状態で見つけた最初のレコードの y 座標を使用します。

実行しようとしているコードは次のとおりです。

問題は、変数 y がこれらすべての引用符に埋もれてアクセスできないように見えることです。メソッドは成功しますが、UI は期待どおりに応答しません。コンソールでメソッドを試しました。変数を整数に置き換えると、期待どおりに機能しますが、変数は機能しません。違いのないグローバル変数にしてみました。ボタンをタップする代わりにタップコマンドを使用しようとしましたが、これもサイレントに失敗しました。

この方法でこのメソッド内の変数を参照する方法はありますか?

0 投票する
1 に答える
488 参照

c# - 単体テスト WPF コントロール子ダイアログへのアクセスを取得

NUnit を使用して WPF コントロールをテストしています。テキスト フィクスチャは基本的に、新しいスレッドでテストするコントロールを含むテスト ウィンドウを開きます。次に、Microsoft UI オートメーション (UIA) を使用してコントロールを操作します。

新しいスレッドがウィンドウを表示し、ディスパッチャーを開始します。物事は期待どおりに機能します。

私たちが直面している問題は、このコントロールがダイアログを起動できることです。ダイアログが起動したら、対話して閉じる必要があります。このタスクを実行するためのこのダイアログへの参照を取得できませんでした。

うまくいかない解決策の 1 つは、Application.Current.Windows を使用してすべてのウィンドウを取得し、ダイアログが見つかるまで繰り返し処理することです。単体テスト中に Application.Current = null であるため、これは機能しません。このテストだけを気にする場合は、アプリケーションをインスタンス化するだけです。ただし、アプリケーション変数が範囲外になると (テストの最後に)、アプリケーションは自動的にシャットダウン モードになるため、これは他のテストに干渉します。その結果、他のテストは失敗します (最も顕著なのは、InitializeComponent が通常、シャットダウン モード中に呼び出すことができない System.Windows.Application.LoadComponent を呼び出すためです)。

必要なのは、Application.Current.Windows に代わるものだと思います。

0 投票する
1 に答える
1352 参照

com - Microsoft UIAutomation に内部タイムアウトはありますか?

UI Automation COM-to-.NET Adapterを使用して、Windows 7 で FLASH コンテンツを再生するターゲットの Google Chrome ブラウザーのコンテンツを読み取ります。動作します。

コンテンツと要素を取得することに成功しました。しばらくはすべて正常に動作しますが、数時間後に要素にアクセスできなくなります。

0の子を(AutomationElement).FindAll()返します。

UIAutomation で使用される文書化されていない内部タイムアウトはありますか?

このIUIAutomation2 インターフェイスによると 2 つのタイムアウトがありますが、IUIAutomation インターフェイスからはアクセスできません。IUIAutomation2 は、Windows 8 (デスクトップ アプリのみ) でのみサポートされています。

したがって、タイムアウトがあると思います。デスクトップ ツリーの先頭から要素の検索と監視を再開する回避策を作成しましたが、要素はまだ利用できません。しばらくすると (どれくらいかはわかりませんが)、要素が再び利用可能になります。私の要件は、値を常にできるだけ速く読み取ることですが、この動作はアーキテクチャ全体に損害を与えます。3分のタイムアウトがあるとどこかで読みましたが、よくわかりません。

タイムアウトがある場合、それを変更することは可能ですか? 何かを再起動したり、何かを解放/破棄したりすることは可能ですか? MSDN で何も見つかりません。

何が起こっているのか、どのように解決するのか、誰にも分かりませんか?

0 投票する
1 に答える
660 参照

c# - Windows UI オートメーション: イベント ハンドラーを追加するときのスレッド ブロック

Com 相互運用機能を介して UI オートメーションを使用する C# プログラムを作成しています。ただし、別のイベント ハンドラー内からイベント ハンドラーを追加/削除する際に問題が発生しています。

私のプログラムは新しい MTA スレッドを開始し、そのスレッドで AddFocusChangedEventHandler() を呼び出します。

フォーカスされた要素のプロパティの変更を監視したい。そのため、フォーカスが変更されたハンドラー内で、以前にフォーカスされていた要素に対して RemovePropertyChangedEventHandler() を呼び出し、新しくフォーカスされた要素に対して AddPropertyChangedEventHandler() を呼び出します。

ただし、約 2 回のフォーカス変更の後、フォーカス変更イベントまたはプロパティ変更イベントのいずれかが発生しなくなることがわかりました。私の推測では、何かがバックグラウンド スレッドをブロックしているようです。

プロパティが変更されたコードを削除すると、フォーカス トラッキングだけが期待どおりに機能します。

これが適切かどうかはわかりませんが、ドキュメントには、イベントハンドラーを同じスレッドで追加/削除する必要があると記載されています。あるフォーカス変更イベントで AddPropertyChangedEventHandler() を呼び出し、別のフォーカス変更イベントで RemovePropertyChangedEventHandler() を呼び出しているため、2 つの呼び出しが異なるスレッドで実行されている可能性があります。ただし、これが事実であるとは思えません。たとえそうであったとしても、私が見ているブロッキング動作を示すべきではありません。完全を期すためにここで言及するだけです。

0 投票する
2 に答える
1116 参照

c# - UIA InvokePattern.Invoke() は、システムがロックされているときに例外をスローします。(.NET 4.5.2)

システムがロックされるとすぐに、(System.Windows.Automation.InvokePattern からの) Invoke() メソッドの呼び出しが失敗します。この動作は、プロジェクトを .NET 4.5.2 に移行した後に見られます。一方、.NET 4.0 では、システムがロックされていても呼び出しが機能していました。

使用される dll は、UIAutomationClient.dll、v4.0.0.0 です。

私が得る例外は次のとおりです。

System.InvalidOperationException はユーザー コードによって処理されませんでした メッセージ = オブジェクトの現在の状態のため、操作は有効ではありません。

UIA を使用した GUI テストでは通常、システムのロックを解除する必要があることを知っています。この呼び出しは、システムが .NET 4.0 でロックされているときに機能していたため、移行後に同じ動作をしたいと考えています。

0 投票する
1 に答える
285 参照

ios - calabash-ios コンソールで uia コマンド「target.deactivateAppForDuration()」を送信すると、エラー メッセージが返される

いくつかの iOS自動化テストを作成しています。send_uia_command を呼び出すと

calabash-ios コンソールでは、期間のバックグラウンド アプリ画面が開いた後、アプリがバックグラウンドになり、次のエラーが表示されます。

問題は何ですか?

更新: このエラーは iOS 9 でのみ返されます。

iOS 8.4.1 は正常に動作します。

0 投票する
1 に答える
134 参照

javascript - プレーンな JavaScript を使用した UIA 呼び出し、DOM ツリーへのアクセス方法がわからない

私は現在、SFSafariViewController が含まれている iOS アプリを自動化しようとしています。ここで、HTML に ID があり、アプリからの AccessibilityIdentifier もあるテキストフィールドをクリックしたいと考えています。私の質問は、SFSafariViewController のために AccessibilityIdentifier が見つからないため、通常の tap_mark または touch が役に立たないため、適切な uia コマンドを記述する方法です。現在、私の uia コマンドは次のようになっています。 uia("UIATarget.localTarget().frontMostApp().document.getElementById('Identifier').click()")

これは、コマンドを実行したときに表示されるエラーです。