PADのUI要素のテキストマッチがしたい。
こんにちは。Tokoです。約1年間BizRibo!月2〜3体開発していました。一区切りして5月からPower Automate for desktop(PAD)に再集中してます。嬉しかったのはUI要素のセレクターが以前より理解できるようになっていたこと。BizRibo!のComponentとPADのUI要素のベースはCSSセレクタで、方法に若干違意があると思って、その違いを確認する試行錯誤にはまっています。
テキストマッチについて。
「テキストマッチ」という表現がPADに似つかわしいかはわからないのですが、BizRibo!のComponentにTextMatchという欄があり
例えば<a href="https://XXX" >宝塚市</a>の「宝塚市」を指定対象にする時に使います。
アクションや設定のアプローチにはツールそれぞれがあるとして、「テキストマッチ」はWeb系アプリの開発で使う頻度が多かったので、PADでのやり方がきになります。
セレクタービルダーで設定する方法があるのか、それとも別の考え方をするのか。。リストで突き合わせて序数と繋げるとか。。しかし150くらい項目があるケースとかあったなぁ。そんなリスト作るのめんどk…..いやMicrosoftってデータ強そうだからリスト作りが簡単なのかも(←イメージです。ただMicrosoftするならもっとデータの勉強しなければと思っている。)
質問させていただきました。
なんらかのやり方があるのは想像できても、その入口がわからなくて迷っていたとき、RPACommunityのPower Automate for desktop イベントできぬあささんのセレクターの実演の機会にめぐりあい、質問を投稿させていただきました。
詳細なお返事に申し訳ないやら嬉しいやら、しかも目から鱗!!
本当にありがとうございます。
やってみました。
モヤモヤしていた霧がスッキリ晴れました。早速やりたかったことのサンプルフローを作ってみました。
サンプル用のサイトは4列(div)4行(p)でエリアを並べています。このエリアの中からエクセルで指定したエリアに一致したものをClickするフローです。
※このとき、
前者のケースだと属性がつかえます。今回は 後者のケースの試行です。↓
<a href="#" title="宝塚市の情報">宝塚市</a> <!-- 属性値でマッチングできるケース -->
<a href="#">宝塚市</a> <!-- テキストでマッチングするケース-->
子供か子孫か
最初、4列に分けたDivもセレクターに入れていました。
その場合、宝塚市だとループ回数(%LoopIndex%=5)の結果から
2列目の2行目が指定できるように、If Else Thenを繋げて%LoopIndex%を加工する処理がはいります。加工処理後の値を%DivNum%と%PNum%に入れて指定。↓
div[Class="wp-container-5 wp-block-columns"] > div:eq(%DivNum+0%) > p:eq(%PNum+0%) > a:eq(0)
でも、4列Divの指定を略せば%LoopIndex%そのまま使えるんじゃ。。。
「>」は直下の「子供」をつないでいくのですが、
「 」(半角スペース)で「子孫」の関係が指定できます。
div[Class="wp-container-5 wp-block-columns"] p:eq(%LoopIndex+0%) > a:eq(0)
列指定を飛ばすことで、pが「エリア」の通し番号になって%LoopIndex%をそのまま指定OK。
やってみて思ったこと。
%LoopIndex%はとても便利。
▷使い道が多いループ回数をアクション作成時に%LoopIndex%に取得できるPADのお気持ちが嬉しい。セレクターの編集次第でフローも変わることがある。
▷フローとセレクターどの組み合わせが正解というのではないから、今回の場合は後者の方が私は好きだけど、ケースバイケースで選択できる引き出しだと思います。div:eq(%DivNum+0%)をdiv:eq(%DivNum%)としたら指定できず。
▷div:eq(%DivNum+0%)でなければ認識してくれなかった理由は不明。変数を数値に変換を挟んでもダメだった。。。div:eq(%LoopIndex+0%)も同じく。そんなわけないはずなので、何かやらかしてるのだと思うのですが、ひとまず動いたからよしとしました。理由がわかったら追記します。ビジュアルエディターのOrdinalに%LoopIndex+0%としたら指定できず。
▷カスタムにして直接書けばOK。これも私がボケているのが原因かも奥が深い。
▷迷いながら進めばよしですね。
ありがとうございました。