見出し画像

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>の「宝塚市」を指定対象にする時に使います。

Component>Component欄がPADのUI要素セレクターと類似法則で階層指定。
Component>TextMatch欄は要素内のテキストを指定する時に使用。
(ここでは変数Area1のテキストと一致する要素を指定している。)

アクションや設定のアプローチにはツールそれぞれがあるとして、「テキストマッチ」は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。

セレクターの編集の変更でこの処理がまるっと不要に。

やってみて思ったこと。

  1. %LoopIndex%はとても便利。
    ▷使い道が多いループ回数をアクション作成時に%LoopIndex%に取得できるPADのお気持ちが嬉しい。

  2. セレクターの編集次第でフローも変わることがある。
    ▷フローとセレクターどの組み合わせが正解というのではないから、今回の場合は後者の方が私は好きだけど、ケースバイケースで選択できる引き出しだと思います。

  3. div:eq(%DivNum+0%)をdiv:eq(%DivNum%)としたら指定できず。
    ▷div:eq(%DivNum+0%)でなければ認識してくれなかった理由は不明。変数を数値に変換を挟んでもダメだった。。。div:eq(%LoopIndex+0%)も同じく。そんなわけないはずなので、何かやらかしてるのだと思うのですが、ひとまず動いたからよしとしました。理由がわかったら追記します。

  4. ビジュアルエディターのOrdinalに%LoopIndex+0%としたら指定できず。
    ▷カスタムにして直接書けばOK。これも私がボケているのが原因かも

  5. 奥が深い。
    ▷迷いながら進めばよしですね。

ありがとうございました。

いいなと思ったら応援しよう!