UiPathのレコーディングに関するQ&A ※随時更新

　UiPathでワークフローを組む場合、まずレコーディングでPC操作をアクティビティに落とし込み、
それをベースに変数／ループ／分岐などを入れながら仕上げてゆくのが基本なので、
とっかかりとなるレコーディングを使いこなせれば効率的にワークフローを組んでいけます。

「レコーディングをやってみよう」的なチュートリアルは色んな方が書かれているので、
ここではレコーディングの実践中に自分が詰まったポイントと対策を、
"自分がわからない＝皆もわからないはず"という勝手な理屈でQ&A形式でリストアップしてみます。

※思い出した都度、少しずつ追記していきます。

|Question|Answer|Comment|
|:-----------------|:------------------|:------------------|
|どのレコーディング機能を使えばいいの？|使い分けをフローチャートで描きましたので見て下さい|後述の記事参照|
|右クリックが記録できない・・・|F2（一時停止機能）を活用|類件：レコーディング中にスクロールバーが動かせない|
|ナントカAnchorダイアログがウザい|基本Noでいいです|Do you want to use an Anchor?|

# で、結局どのレコーディング機能を使えばいいの？
UiPathでは①Basic/②Desktop/③Web/④Citrixの４つのレコーディングモードがあり、
毎回どれを使うべきか悩むので、↓のようにフローチャートにしてみました。
![bunki.png](https://qiita-image-store.s3.amazonaws.com/0/255097/9dc1b222-e5e5-ad63-df16-b3a499c7de68.png)

### ③Webレコーディング
　コレが一番わかりやすい。ブラウザでのWeb操作ならWebレコーディング。
図中の"(※)"で記したHTMLベースというのは、簡単に言うと
ブラウザ上で右クリック→"ソースの表示"で裏のHTMLタグが見えるものを指します。
大抵のWebはこの類ですが、世の中にはそうじゃないFlashやJava appletで組まれた
妙なWebシステムもあり、その場合もWebレコーディングは継続できますが、
**裏ではDesktopレコーディングが実行されます。**

### ①Basicレコーディング vs ②Desktopレコーディング
これはさすがにわかりにくいのか、公式の[ナレッジベース](https://www.uipath.com/ja/knowledge-base/difference-basic-recording-and-desktop-recording)でも違いが解説されてます。

レコーディングの結果としてBasicでは１つ１つのアクティビティが完全セレクターで実装され、
一方Desktopではコンテナ(Window Scope)＋部分セレクターで実装され、
みたいな話がありますが、イメージは↓のような感じです。

![selector.png](https://qiita-image-store.s3.amazonaws.com/0/255097/711e2617-9437-4945-8d33-7789be827910.png)

　これだとBasicレコーディングに良いとこ無いように見えますが、
自分の経験として、Desktopで生成したワークフローだと操作に失敗したのに、
Basicのワークフローだと操作できた例がある（逆パターンもありますが）ので、
Basicモードを活用する機会はあります。

### もはやレコーディングでも何でもない④Citrixモード
レコーディングボタンが無いじゃん。
このモードは「Click ImageやClick OCR Textアクティビティをウィザード形式で実装できるよ」的な
お便利機能だと思ってます。

ちなみにUiPath AcademyではVDIやRemote Desktop先のPCを操作する時に使うとありますが、
画像認識やショートカットキーでしか操作できないような使い方をするくらいなら、
素直にVDI先のマシンにUiPath入れちゃった方が良いと思います。
図中の"違うやり方を考える"というのはそういう意味です。

# 右クリックが記録できない・・・
公式でも右クリックやショートカットキーはレコーディング不可と説明があります。

アプリケーションの右クリックメニューを操作するシナリオをレコーディングしたくても、
レコーディング中に右クリックすると即レコーディングが終わってしまいます。

ここで使うのが**"F2"ボタン**です。
レコーディング中（正確に言うとIndicate on screen、対象が青枠で選択されるモード中）に
F2ボタンを押すと、**３秒だけレコーディングが一時停止され**自由に操作できます。
（一時停止中は画面右下に３→２→１→０とカウントダウン表示されます）
　![count.png](https://qiita-image-store.s3.amazonaws.com/0/255097/cca540da-2460-69b2-6a09-a1f3c10586a1.png)

さっきのシナリオをレコーディングするには、
　①左クリック(※後で右クリックに手動で変更) 
　→ ②F2で一時停止 
　→ ③一時停止中に右クリックしてメニューを出しておく
　→ ④3秒後にレコーディングに戻ったらメニューを操作
で一旦ワークフローに落とした後、
①のClickアクティビティのプロパティをBTN_LEFT → BTN_RIGHTに変更すれば[完成](https://drive.google.com/open?id=16kOQ-pndH4uZexyMjNIc9YaNkUmKD9JQ)です。
　![mouse.png](https://qiita-image-store.s3.amazonaws.com/0/255097/8a992960-e9a2-be6d-f5fa-c0be00127276.png)

F2による一時停止はレコーディングで必須のテクニックなのでぜひ覚えましょう。
似たような案件で、レコーディング中は
「押したいボタンが下のページに隠れてるのに、Page Downキーや縦スクロールバーが動かせない」
「マウスオーバーで出てくるサブメニューやバルーンを出したいけど出てこない」
などありますが、これらもF2を使えばなんとかなります。

あとここまで書いといてなんですが、
F2はレコーディングの一時停止というよりはIndicate on screenの一時停止なので、
Attach to live elementやUi Explorerでの選択時など汎用的に使えます。

# 途中で出てくるナントカAnchorダイアログがウザい
毎回一度は出てくるこのダイアログ
![Anchor.png](https://qiita-image-store.s3.amazonaws.com/0/255097/d444c87e-6ed1-2b79-1f68-cef25a57f98e.png)

自動的に生成されるSelectorの信頼性が低いので、別の信頼できるSelectorのオブジェクトを
Anchor（よりどころ）として、そこからの相対位置で操作しろ、という話。

ただ、基本は**Noで良い**です。理由は２つあって、
①Indicate Anchorを選んでもAnchorを指定できないケースが多い（↓のエラーが発生）
　![error.png](https://qiita-image-store.s3.amazonaws.com/0/255097/92d2b0a2-66b5-70cd-ad04-558ca4e13029.png)

②Anchorを指定しなくても成功する事が多い、又はSelectorの工夫でなんとかなる

これに尽きます。
Indicate Anchorができたとして、↓のようにAnchor Baseを使った大掛かりな仕掛けになるので
単独アクティビティでSelectorを工夫した方が保守性も良いと思います。
![anchorbase.png](https://qiita-image-store.s3.amazonaws.com/0/255097/57d2f8cd-b189-927f-d982-7cb73b37b65a.png)

---
今回はここまで。
前回の投稿から日が経ってしまいましたが、Minecraft始めたらそればっかりやっちゃって
家でUiPath触る時間が無くなってしまったという情けないオチです。
それではいかんので、レコーディングネタを思いついた都度、記事の内容を追記していきます。