【UiPath】クリックアクティビティをクラシックからモダンに変えてみた

# １．はじめに
　UiPathのアクティビティにはクラシックアクティビティとモダンアクティビティが存在しています。モダンアクティビティは、2020.4からUIAutomationNextアクティビティパッケージが導入され、登場したものとなります。
　古くから利用されている方はクラシックアクティビティの方が慣れている方も多いかもしれませんが、最新の機能や認識精度の向上などがモダンアクティビティを利用すると享受できるため、クリックアクティビティをモダンアクティビティに切り替えるときの設定方法を確認してみましょう。

# ２．ユースケース
　ユースケースとして、表内にある先頭行の「表示」というボタンをクリックする状況を想定します。
具体的なページイメージは以下のようなものとなります。
（[https://www.expense-demo.com/ledgers/b17233f275d54c65a8693d2c731039bb](https://www.expense-demo.com/ledgers/b17233f275d54c65a8693d2c731039bb)）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3301393/a2c3f59c-73a6-2834-c493-4ac2cd04a4b5.png)

# ３．クラシックアクティビティの場合
### ３．１．ワークフロー
　先頭行を操作する際のセレクター設定方法は、主に3種類あります。
#### ①クリックアクティビティのみ（tableRowを利用）
　tableRowを指定することで、一貫性のあるセレクターを実現しています。
　__◆設定結果__
　![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3301393/b6ac32cc-2565-c317-6a15-df4a83cbc842.png)

#### ②アンカーベースを利用（要素を探す＋クリックアクティビティを配置）
　アンカーとなる要素は上下左右のいずれかもしくはAutoを指定することで、ターゲットを認識することができます。
　__◆設定結果__
　![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3301393/80db48d7-faec-6d09-90d2-968b29a0df73.png)

#### ③navタグを利用（UI Explorer上でアンカーを選択　詳細な設定方法は[ワークフロー動作安定化](https://www.uipath.com/ja/community-blog/knowledge-base/workflow-stabilization)P49参照）
　アンカー選択をすると、自動的にnavタグの生成をしてくれますが、上級的なテクニックになります。
　__◆設定結果__
　![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3301393/a00b580f-2797-028f-a653-f8eced636514.png)
　
#### <参考>クリックアクティビティのみ（tableRowなし）
　tableRowを入れなくても最初に見つかった要素をクリックしてくれます。ただし、最初の要素がどこかはセレクター認識の内部ロジックと操作対象のアプリケーションの作りに依存するため、テスト等をしてご利用ください。
　__◆設定結果__
　![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3301393/3d6cdd53-ba4d-4ea4-4971-453825b449be.png)

# ４．モダンアクティビティの場合
### ４．１．ワークフロー
　先頭行を操作する際のセレクター設定方法は、変わらず3種類あります。
　設定時に厳密セレクターとあいまいセレクターを使い分けるというのがポイントになります。
#### ①クリックアクティビティのみ（tableRowを利用）
　厳密セレクターを利用することでtableRowを利用した一貫性のあるセレクターを実現しています。
　なお、あいまいセレクターでもtableRowを使用することは可能です。
　__◆ターゲット設定画面__
　![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3301393/c6f73ace-2c9b-2876-1fe7-03523ae1588b.png)
　__◆設定結果__
　![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3301393/5b71460a-0c44-de90-ad49-a1162dc5d739.png)

#### ②アンカーを利用
　アンカーベースから置き換わったアンカーとなり、あいまいセレクターのみで利用できます。
　また、最大3つまでアンカーを設定することができます。
　__◆ターゲット設定画面__
　![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3301393/85260e45-01bb-ef96-4718-69788a5469dd.png)
　__◆設定結果__
　![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3301393/7b95d90d-1ae2-48e6-d082-98b232851508.png)

#### ③navタグを利用（UI Explorer上でアンカーを選択　詳細な設定方法は[ワークフロー動作安定化](https://www.uipath.com/ja/community-blog/knowledge-base/workflow-stabilization)P49参照）
　厳密セレクターの場合に利用できるアンカーとなります。クラシックから大きく変化はありません。
　__◆設定結果__
　![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3301393/879ba069-599e-1516-bd1e-32785a1f6936.png)
　
#### <参考>クリックアクティビティのみ（tableRowなし）
　クラシック同様に厳密セレクターを利用すれば、設定が可能となります。
　__◆ターゲット設定画面__
　![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3301393/567867a8-adf0-56f8-005d-6f89d700aaa1.png)
　__◆設定結果__
　![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3301393/de9d315b-ad69-0955-a408-54fc963a267b.png)

### ４．２．厳密セレクターとあいまいセレクター
　厳密セレクターは、クラシックアクティビティのセレクターと同様となり、タグ情報や属性情報と完全に一致した画面UI要素を操作対象として認識します。一方、タグ情報や属性情報を持つ**同じ要素**が複数存在した場合、最初に見つかった要素を操作対象として認識します。
　あいまいセレクターは、タグ情報や属性情報を元に精度の閾値より大きな値となった画面UI要素を操作対象として認識します。一方で、タグ情報や属性情報を持つ**類似要素**が複数存在する場合、エラーとなってしまいます。そのためターゲット要素を一意に特定できるようにタグ情報と属性情報を設定することが必要となります。
　厳密セレクターとあいまいセレクターのどちらを優先的に使うかというお話になりますが、以下のような使い分けをするとよいと思っています。
　UiPathの操作に慣れるまでおよび高度な安定性を求めない場合は、各アクティビティで優先されるものを利用してください。高度に安定性を求めたい場合は、厳密セレクターで一意にできる要素を指定してください。もし厳密セレクターで表現が難しい（例えば、アンカーが複数必要）場合は、あいまいセレクターを検討していくのが良いと考えています。

# ５．最後に
　tableRowなしのクリックはテスト等をしっかりする必要があると述べましたが、以下のようなケースでは重宝されると考えています。
　以下のサイトは作成日で昇順／降順を切り替えられませんが、作成日の昇順で表示された宿泊費をクリックしたいケースを考えます。
　__◆サイト例__
　![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3301393/b9af84fe-5317-ead7-4af6-4118211cf614.png)
　
　__◆設定結果__
　厳密セレクターを利用し、ターゲットを「表示」ボタン、navタグを利用したアンカーをタイトル列の
「宿泊費」とすることで、最初に見つかった要素を取得することができます。
　![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3301393/b33f5290-9e57-68ed-c07b-1b7196d1e2e5.png)

本記事はあくまでも個人の見解を述べているものとなりますので、参考情報として頂ければと存じます。