RPA体験談【実践編:UiPathのFind Children(子要素を探す)を使って範囲内の全てを処理する】
Find Children(子要素を探す)のアクティビティについて説明します。
ここで範囲を指定して、範囲内の処理に進みます
(処理:GetAttribute:表示名や行番号・列番号を取得や クリックなど)
2020/9/19追記
久しぶりにFindChildren(子要素を探す)を作ろうと思ったら、すっかり忘れていて
このブログを見たのですが、色々わかりにくかったので追記・修正しました。
———————————————————-
2020/9/19追記
こういう時に使うイメージです。
枠で囲まれた範囲を順番に参照して特定の行のアイコンをクリックするときなどに使います。
———————————————————-
説明をみると「指定した範囲とフィルター条件に従って、子の UI 要素のコレクションを取得します。」と書いてあります。
なんのこっちゃ。
範囲を決めて、全てを順番に処理していく処理です。
さらになんのこっちゃ。
事例で説明した方がわかりやすいですね。
どんな時に使うかというと(私の事例ですが)
(例1)単純に全てを処理する
(例2、3)データが2層構造になっているケース(第1表がヘッダー情報で、第2表が明細になっている)で
(例2)全ての行のデータを処理する
(例3)必要な行のデータを処理する
うーん、やっぱり、わかりやすくない。
というわけで、イメージで表示します。
【イメージ】
(例1)全てのデータをダウンロード
(例2)はスクレイピング
(例3)は承認ボタンを押下する
※(例2)の様に「第1表」が1行ずつの表示なら、最後の行の行番号が取得できれば、
ForNextで1行ずつ処理しても同じことができるので、ケースバイケースかとは思います。
(スピードはどちらが速いかはわかりませんが)
最後の行番号はスクレイピングか、URLを開いた直後にショートカットSendHotKey(例えば、ctrl+tab)でも取れる(時もある)と思います。
例3の様に行によっては「編集ボタン」が無いケースではFindChildrenが真価を発揮すると思います。
【作成方法】
さて、例を示したところで、実際のコーディングについてです
———————————————
2020/09/19追記
以下に必要なことは書いてあるんですが、実際に作ってみると見落としによる抜けがあり、何度も直す羽目に陥りました。
(自分で「わかりにくいんだよ!」とツッコむ感じです。)
そんな訳で、事例と作成手順のみを最後に書いておきます。
———————————————
設定箇所:FindChildren(子要素を探す)アクティビティの設定箇所は、以下の4箇所です。
Filter:範囲の中での抽出箇所
Selector:URLも含めた範囲全体
Scope:FIND_CHILDREN もしくは FIND_DESCENDANTS
※Children子供は、すぐ下の階層、descendant子孫は、それ以下の階層を示します。
(他にもFIND_PROCESS等もあるますが、選択肢は、この二択だと思います)。
Children:これからForEachで回す範囲名。この変数タイプは、「IEnumerable<UiElement>」となるので、プロパティ画面上で右クリックで設定するのが一番楽だと思います。
その後の処理
For Each(繰り返し(コレクションの各要素))
Find Childrenで選択した範囲を順番に処理
その中で、Get Attributeとか Clickとかを実施
For Eachの設定方法はこんな感じです。
TypeArgumentを UiPath.Core.UiElementにするのを忘れないでください。
例えばの例ですが、以下の様に Find Children と For Each と GetAttribute等のアクティビティを組み合わせます。
【Filterの入力内容と ForEachの例】(↓クリックすると拡大します)
Find Childerenの中の
・Selectorを何にするか?
・Filterを何にするか?
・FIND_CHILDRENなのか、FIND_DESCENDANTSなのか?
を細かく調べるには、Ui Explorerを使います。
使い方の詳細については次回↓に掲載します。
RPA体験談【実践編:UiPathのUiExplorerでUi要素の詳細を調べる】
———————————————
2020/09/19追記
作成手順を一から順番に書いておきます。
こんな事例です。
UiPathの作成方法
1.UiExploreで準備
Ui要素を取得してメモ帳等に貼り付けておく
①FindChildrenする範囲のUi要素を取得
②文字を取得する要素を「v」してUi要素を取得(列番号が必要)
③クリックする列(この場合はラジオボタン)を「v」チェックして、Ui要素を取得(要素全体が必要)
UiPath上の処理
2.テスト用に文字列を比較する変数を作り代入しておく
3.FindChlidren(子要素を探す)の作成
3_4.Scope
4.ForEachの作成
5.動作確認
6.動作補正
7.ラジオボタンをクリックする動作を追加
7_1.Ifアクティビティ
(ダブルクォーテーションを忘れずに)
7_2.Breakアクティビティ
図にするとこんな感じです。
———————————————
↑日記の目次を作りました。