問題タブ [automationelement]
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.
automationelement - TreeScopeの自動化FindFirstが要素を見つけられない
NameプロパティとControlTypeプロパティを検索するときに、TreeScopeがInternetExplorerで要素を見つけるのに問題があります。
mainElementは、「internetExplorer_Server」を表すAutomationElementです。
すべての自動化要素は、UISpyのmainElementの下に一覧表示されます。
public Auto.AutomationElement GetElementByNameAndControlType(Auto.AutomationElement mainElement、System.Windows.Automation.ControlType controlType、string propertyName)
{{
私はついに以下のコードで要素を見つけることができましたが、上記のコードが機能しなかった理由を本当に理解したいと思います。
public Auto.AutomationElement GetElementByIsValuePatternAvailablePropertyAndName(Auto.AutomationElement mainElement、string name、Auto.ControlType controlType)
{{
}
c# - Windows.Automationを使用して、正規表現でAutomationElementを見つけることはできますか?
テーブルの親内に行オブジェクトを持つオブジェクトツリーがあります。これらすべての行をに入れようとしていますAutomationElementCollection
すべての行AutomationElement.NameProperty
には、文字列「row」が含まれています。ただし、これらはその文字列のバリエーションです。たとえば、「Row1」、「Row2」、「TopRow」、...
このメソッドでは、提供されたパラメーターに一致するFindAll
を定義しTreeScope
て検索できるため、何かが足りないようです。で検索スコープを制御できるので、条件を制限しないようにしたいだけです。AutomationElement
Condition
TreeScope
c# - TreeWalker は別のウィンドウからコントロールをトラバースします
多くのログ メッセージを含むアプリケーション ウィンドウで作業しています。それらをフィルタリングして、何らかの条件に一致するものだけを取得する必要があります。それらすべてをトラバースするという私の選択はTreeWalker
、後で大量のメッセージをフィルタリングするのAutomationElement.GetAll()
はコストがかかりすぎるためです (何千ものメッセージがある可能性があります)。
これは、私がテストしているコントロール階層の UISpy ビューです。
予期せずmessages
、長さが実際のログ メッセージ数よりも大きくなっています。追加の自動化要素である UISpy を照会したところ、この要素が別のウィンドウから取得されたことがわかりました (条件にも一致しましたControlTypeProperty = ControlType.DataItem
)。さらに、このウィンドウは別のアプリケーションにも属していました。TreeWalker
の範囲で検索を終了し、parentDatagrid
すべてのデスクトップ階層をトラバースし続けました。
もちろん、datagrid の子要素だけを取得したいと考えていました。このような奇妙なTreeWalker
動作の原因は何ですか? 私のコードが間違っているのかもしれませんが、同じ断片を複数回書いたところ、正しく動作しました。
automation - AutomationElement からイメージ クラスのコンテンツを取得する
画像を含むサードパーティ アプリでコントロールを歩いています。オートメーション要素は、クラス名 Image を返します。その Image の内容をビットマップ オブジェクトまたはバイトとして取得する方法について何かアイデアはありますか?
c# - タスク スケジューラを使用していて、ユーザーがログオフしているときに AutomationElement を見つけるにはどうすればよいですか?
ユーザーがログオフしている特定の時刻に実行するように設定されたアプリケーションがあります。Selenium と C# の UI オートメーションの組み合わせを使用して、毎日ファイルをダウンロードします。ログインして実行すると、すべて問題ありません。ただし、タスク スケジューラを介してアプリケーションを実行すると、AutomationElement を見つけようとすると失敗します。
次の PropertyConditions から始めます。
もともと、「デスクトップ」ルート要素を見つけようとしました
しかし、調査の結果、この方法でアプリケーションを実行した場合、実際にはデスクトップが作成されないことがわかりました。また、レジストリで NoInteractiveServices が false に設定されていることを再確認し、Selenium を介してスクリーンショットを撮り、Web 自動化が正しく機能していることを確認しました。
次のコードを使用して、RootElement のすべての RootElement の TreeScope.Children をログ ファイルに書き込むことを再確認しました。
そして、何も表示されませんでした。
次に、プロセス ハンドルから AutomationElement を見つけようとしました。
繰り返しますが、何もありません。
「フックする」AutomationElementを見つけようとして立ち往生しているので、その保存ダイアログボックスの検索を開始できます。皆さんの考え、提案、ヒント、または「相棒 - あなたは間違ったことをしている!」などを知りたいです。よろしくお願いします!
c# - InvokePattern のない AutomationElement へのクリックの送信
を使用して、マウスを動かしてクリックをシミュレートすることなくAutomationElement
、クリックを に送信する方法はありますか? 私にとってはまだ新しいです-私が理解している限り、それがサポートされていない限り(TabItemはサポートしていません)、コントロールの場所を見つけてマウスをシミュレートするルートをたどる必要があります。私はそのコードが機能しています(以下を参照)-これが私のオプションであるかどうかに興味があります。TabItem
AutomationElement
InvokePattern
ありがとうございました。