【UiPath】初心者向け！！セレクターについてまとめてみた

# はじめに
ここでは、UiPathの特徴の1つである、「セレクター」について理解を深めるべく、まとめていきます。

・そもそもセレクターとは
・セレクターを調整するときのポイントって？

といったところをお伝えできればと思っております！

**使用環境**
Studio Pro v2020.4.1　Community License

# セレクターとは
そもそも、「セレクターって何？」とセレクター自体のイメージがつかめていない方も
やはり多いのではないでしょうか。

UiPath公式ガイド([セレクター](https://docs.uipath.com/studio/lang-ja/docs/about-selectors))や、[UiPathアカデミー](https://www.uipath.com/ja/rpa/academy)での説明で使用されている言葉を借りると、

セレクターとは、ユーザーインターフェース内の特定のアクションを自動化するために、
それぞれ連携したいアプリケーションの要素の属性を使用して、**指定した要素までの住所**のようなものを
自動生成した文字列

という感じです。
これだけじゃ、パッと分かりずらい、、、

「セレクターって？」というのをざっくり簡単にイメージを持つためには、、
UiPathの社名の由来なんかを知るのも１つ手かなと私は感じたので、ご紹介します！

と言うのも、、
UiPathのCEOである、長谷川康一氏は対談にて、社名の由来を以下のように説明しています。
【引用元】IT Leader | 株式会社インプレス
- [RPAは企業の競争力を左右する「経営基盤」になる　キーパーソン対談：百瀬公朗氏×長谷川康一氏](https://it.impress.co.jp/articles/-/16450)
>UiPathの社名の由来は、ユーザインタフェースをパスで繋ぐという意味です。
そこにはしっかりしたフィロソフィーがあるのですね。
どのシステムでもユーザインタフェースを持っていますが、
それを繋ぐ存在であるということを宣言しているわけです

皆さんも共有したいファイルの場所を伝える際などには、ファイルパスを伝えますよね。

ファイル：
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/614942/1581d2b5-a644-cb51-09f3-12002f0d2df3.png)

つまりは、それと一緒で、いろんなシステムそれぞれのユーザーインターフェース(ウィンドウやボタン)の情報を使用して、
システム同士等を連携(パス)するから、「UiPath」です。
そして、住所のように自動生成されたもの、それこそが「**セレクター**」のイメージなわけです。
なんとなくイメージできましたかね、、？

ユーザーインターフェース：(Chromeブラウザーで弊社HPを開いたものを例にすると、、)
![UIAddressImage.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/614942/9cb253b5-c011-5ff7-09e5-2053acb7d3c0.png)

実際に上記の画面の「ホーム」の部分を取得させたセレクター情報は、以下のような形
![ARIHP-Selector.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/614942/04b8098d-4a68-87ca-1d73-b1c7b27a9bb3.png)
↓上記の[セレクターエディター]が開けない方は下をクリックしてください↓
<details><summary>[セレクターエディター]の開き方</summary>
アクティビティの右の方にあるボタンより、[セレクターを編集する]を選択する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/614942/9e64d885-f3da-823f-6d9d-2f1449367d40.png)
あるいは、プロパティ> 入力 > セレクターの欄の右端にある[...]ボタンを選択することでも開きます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/614942/8a337bc4-0ea3-40f1-447b-79307d7b4e8d.png)
※下記のようにプロパティ>入力>ターゲットの左に[+]マークの時は、[+]マークをクリックして、
展開すると、上記のようにセレクター欄を確認できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/614942/fe6bb9c3-44a6-9758-935c-301fab8d0cb8.png)
</details>

自動生成といっても、それぞれ連携したいアプリケーションの情報(画面構成)を取得して、
特定箇所を指定するために必要となる部分を
UiPathが判断して抜き出した情報を表示しているといった方がイメージがしやすいでしょうか、、。

UiPath Studio では、アプリケーション上のユーザーインターフェースを認識するために、
操作対象のセレクター情報を文字列で指定できます。

# セレクター調整するときに見るべきポイント
初めのうちは、以下の2点を抑えておくだけで、セレクター情報を何となく読み解けるのではないでしょうか！！

**1.分かりやすいセレクター要素を頼りに判断する**

**2.指定した対象のセレクター情報の内、可変的になりやすい要素を推察する**


## 1. 分かりやすいセレクター要素を頼りに判断する
例えば、Webシステムからあるファイルを名前を付けて保存する際、
下記のようなウィンドウにて名前を付けて保存する流れを想定し、ワークフローを作成するとします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/614942/a31395d7-0d58-193d-a0ee-e61eaf599ad6.png)

ファイル名を入力するため、[文字を入力]アクティビティでファイル名の欄を要素指定し、
セレクターを確認してみましょう。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/614942/98ca8e0a-a669-16f2-ade7-a0b09dd5147a.png)

要素がたくさん取得できていますね、、
中には、「cls = DirectUHWND」等よくわからない要素もありますね。。

そういったよくわからない要素は、一旦置いておいて、
**指定した場所が特定できそうな要素があるか**について、まずはチェックすることを心がけてください！

ここでの例でいうと、上記アクティビティでは、ファイル名を入力するため、
[文字を入力]アクティビティでファイル名の欄を要素指定したので、
「**ファイル名の欄であること示す要素があるか**」がチェックポイントになります。

つまりは、「**aaname = ファイル名:**」って部分に着目できればOKです◎

### 取得したセレクター要素がどれもいまいち、、の場合
指定したセレクター要素がどれも分かりにくいものばかり取れてしまった、、ということも
連携するシステムによっては、よくあることです。。

ただし、[セレクターエディター]に表示されている要素は、実は...すべての要素ではなく、
表示されていないが、取得できている要素というものがあるのです。

そういった要素を確認できる機能が、「**UI Explorer**」です。
#### **UI Explorer**
UI Explorerとは、特定のUI要素のカスタムセレクターを作成できる高度なツールです。
※その他詳細情報は、UiPath公式ガイドを併せてご参照下さい。-[UI Explorer](https://docs.uipath.com/studio/lang-ja/docs/uipath-explorer)

##### UI Explorerの開き方
UiPathStudioのデザインタブにある[UI Explorer]を選択することで使用できます。
![tabDesign.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/614942/dd731bf5-8c1e-ab1a-710a-53b9e73fd904.png)

が！！
ここでは、もうひとつの開き方をお薦めします。
もうひとつの開き方は、セレクターエディターから開く方法です。
この開き方をすると、各アクティビティで指定したセレクターを編集し、
そのまま保存することが出来ます！
![SelectorEditer-UIExplorer.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/614942/7a724b71-cd06-387a-d2e0-1baa8cbd5706.png)

※注意ポイント※
この開き方を行う際は、検証マークが緑(下記画像参照)になっているかご確認ください。
![検証マークが緑](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/614942/08c2cca1-863f-beb7-3e43-8275a59459cc.png)
検証マークが緑でなくとも開くことはできますが、
画面上に指定した要素の存在が確認できないと、詳細な要素の情報が取得できないため、
UIExploreの情報が空白で表示され、選択されていない要素の追加(後に紹介する内容)を行うことが出来ません。
検証マークが緑以外であるときは、再度指定し直してみてください。

##### UI Explorerの使い方
UI Explorerを開くと、以下のようなウィンドウが表示されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/614942/54979e7d-cbd7-a559-52c7-aadfb14e6264.png)
ここで、着目してほしいのは、下記画像赤枠の[セレクターエディターパネル]と[セレクター属性パネル]になります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/614942/b1d5b7b1-3d6e-70e5-eed2-2749a83aa785.png)

上記2つのパネルは、[セレクターエディター]に表示されていた、
[属性を編集]の部分　　　 　→ 　[セレクター属性パネル]
[セレクターを編集]の部分　 → 　[セレクターエディターパネル]
とそれぞれ一致するようになっています。

そして、それぞれのパネルにて、チェックが付いている要素が
現在、指定したい部分の要素として識別する判断材料になっている要素です。

取得した要素がいまいち、、という場合は、
チェックが付いていない要素に分かりやすい要素が含まっていないかを確認し、
あればチェックを付け、右下あたりにある[保存]ボタンにて保存し要素を追加しましょう。


※今回使用しているバージョンでは、
[セレクター属性パネル]にて、チェックが入っているものは「選択した項目」、
チェックが入っていないものが「選択していない項目」と分かれて表記されていますが、
そういった表記になっていないバージョンの方はチェックの有無でご判断ください。
(バージョンがv19以前のStudioでは、チェックの有無のみになります。)


## 2. 指定した対象のセレクター情報の内、可変的になりやすい要素を推察する

ある特定部分を指定したセレクター要素には、可変的になる要素がよく存在します。

特に可変的になりやすい要素は、属性が「**～～id**」となっているものや、
属性の値が「**数値**」が入っている部分です。

もちろん、上記の条件に当てはまるすべてが可変的になるわけではありませんが、

連携するシステム内部では意味のある番号であっても、使い手側からすると、

全く意味の分からない番号がボタンのIDとして振られていたりすることが多いです。

そういった可変的になりやすい要素はどのように見つければいいかというポイントを
ここからはお伝えできればと！

可変的になりやすい要素の見分け方ですが、ポイントとしては、

「**指定したい箇所を何度もチェックしてみる**」につきます！

これはコツにはならないかもですが、可変的になりやすいかどうかは実際に指定したい部分を開きなおしたりして、
1回目のセレクター要素だけできちんと指定できるものであるのかをしっかり確認することが重要です。

例えば、下記のような「[RPA Challenge](http://www.rpachallenge.com/?lang=ja)」というサイトがあるのですが、、
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/614942/7a243f7c-5680-102c-5c8e-4808df4d2f7f.png)

このサイトの仕様として、[登録]ボタンを押すたびに、項目の位置が変わり、セレクター要素も少し変化するようになっています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/614942/470201ec-535f-97dc-f5f7-2063e237e58d.png)

仮に、電話番号の欄に「06-1234-5678」を入力する[文字を入力]アクティビティを作成してみました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/614942/2269762d-06e3-f950-851a-b0b6b691d270.png)

注目ポイントは、取得したセレクター要素の内、「id」のところ(上記赤枠部分)です。
[登録]ボタンを再度押すと、項目の順番が変わり、このidの値も変化します。
　→→ 気になる方は、実際に[文字を入力]アクティビティを使用して、要素を指定してみましょう:point_up:

したがって、毎回電話番号の欄に入力したくてもこのままではできません。

他に安定しそうな要素も上記の[セレクターエディター]上には表示されていないので、「UI Explore」を開いてみましょう。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/614942/e19bad67-27b8-001b-e699-3429e893ff32.png)

要素を追加する前のポイントとして、、

セレクターエディターパネルにてチェックが付いている要素を、属性別に箇条書きで出したものが、
セレクター属性パネルに表示されているので
下記のように、それぞれのパネルは大項目-小項目の関係性とイメージしていただくといいかもしれません。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/614942/9a0954fe-6592-8f8b-f45d-f6fd8d339a46.png)

したがって、確認していく流れとしては、
①セレクター属性パネル内の、選択していない項目に分かりやすい項目がないかチェック　
→あれば[保存]ボタン
→なかった場合は、②へ

②セレクター属性パネルになかった場合は、次にセレクターエディターパネル内で
　チェックが付いていない要素を選択しなおし、
　またセレクター属性パネルにて分かりやすい項目がないかチェックする

…という流れを繰り返します。

今回だと、
セレクターエディターパネルの下記の部分を選択し、セレクター属性パネルにて項目を確認すると、
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/614942/8f54413e-0b6b-3bd9-5510-8a2bff239e45.png)

「aaname = 電話番号」という電話番号の欄であることを示す、分かりやすい項目が見つかりました。
ですので、セレクターエディターパネルにて選択した項目をチェックし、[保存]ボタンで保存しましょう！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/614942/ad32962c-01f5-f033-59cc-69bfd60ad2ea.png)
以下が保存後の、[セレクターエディター]です。
最初に取得していた「id」の要素は、可変的になるので、外しておきましょう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/614942/fcbd195e-0aa1-f427-0c26-c4dfca3bbe87.png)


以上にて、項目の位置が変わっても適切な場所に登録できるようになっているはずです！！

###【ちょこっと応用編】セレクター調整するときのコツ
###　「規則性を見つける」

上記の例では、可変的になる要素「id」の値は、ランダムに降られた値であり、意味を持たない値でしたが、
可変的であるが、規則性をもって可変的になる場合がある要素もあります。

「どんな規則性か」については、扱う業務やシステムによってさまざまな規則性を見つけられます。

例えば
・月や日ごとに何か処理する業務　
　→　ウィンドウやボタンの要素に日付が含まっている

・社員や顧客等の情報登録業務　
　→　ウィンドウやボタンの要素に社員番号や顧客番号等の意味ある番号が含まっている

・表形式等、順番に並んでいるデータを使った業務　
　→　指定したい欄やボタンの要素に行数や列名に関連する要素が含まっている

等々です。

セレクター要素の情報は、Studioでは文字列の情報として扱えるので、
「可変的だが、規則性があるセレクター」に対しては、変数で制御することもできます。

:::note info
追記：以下で紹介する、セレクター情報への変数設定方法は古いやり方になっています。
　　　新しい方法は便利になっていたので、下記記事も併せてご参照ください。
　　　[【備忘録】新！！UiPath セレクター(Selector)への変数設定方法](https://qiita.com/chi_inamori/items/69d7f9d367d7f8fe79cd)
:::

【セレクター要素に変数を入れるときのポイント】
セレクターを文字列として扱うためには、少しコツがあります。
プロパティパネルの入力 > セレクターの下記の枠内で、操作しないといけないということです！！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/614942/4969accc-c8c7-d8c0-d22a-2f28bfb3fa04.png)
押したくなるのですが、赤枠欄の右横と[…]ボタンは押さないでくださいね！
※一度変数を入れた後であれば、[…]ボタンを押しても大丈夫です。
変数を入れた後、[…]ボタンを押すと、
[セレクターエディター]ウィンドウが下記のような[式エディター]ウィンドウに変わるので、
無事に変数を入れることが出来た目印にしていただければと◎
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/614942/85adc8f5-f67f-a8d5-5e29-dea5757ba436.png)

上記の例では、Yahooの天気予報サイトの下記のところを指定し、
日付に一致する値を変数に置き換えてみました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/614942/69650aa4-2056-94b7-4a87-08f9324250a1.png)

`変更前：　"<webctrl aaname='20(水)' parentid='navCal' idx='*' />"`
`変更後：  "<webctrl aaname='"+ TargetDay + "(*)' parentid='navCal' idx='*' />"`
※TargetDay　= String型の変数で、日付(dd)が入ると仮定します。
※曜日の部分は、どの曜日でも大丈夫なようにワイルドカードである「*(半角アスタリスク)」に置き換えています。

このようにセレクター情報に変数を入れ、可変的な要素を制御することができるので、
より高度なワークフローを作成していくことができます。

このコツに関しては、経験と慣れが求められてくるので、
根気強く向き合っていきましょう。