【Automation Anywhere】Object Cloning (Recorder:Capture) デバッグのベストプラクティス

# 概要
この記事ではAutomation Anywhere v11.3.xのObject Cloningコマンド (もしくはA2019のRecorder:Captureアクション)でオブジェクトをキャプチャした際にうまく動かない場合の対処法についてのコツを紹介します。

前回、前々回の記事

* [【Automation Anywhere】Object Cloning (Recorder:Capture) で取り込まれるオブジェクト情報の中身は？](https://qiita.com/RPAbot/items/e2742a2aaba8608bc0c3)
* [【Automation Anywhere】Object Cloning (Recorder:Capture) の DOMXPath、Pathによるオブジェクトの指定のしくみ](https://qiita.com/RPAbot/items/477c783ef5c2f8e91d9b)

対処法は .NET、HTML、MSAA(Standard)、Java、Silverlight、Flex など利用されているテクノロジーによります。

**v11.3.x**
ダイアログボックスの中ほどに「テクノロジ:」というラベルがあり、その右側に記載があります。(下記の場合は「HTML」)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479715/0b466725-fd2b-e97f-6a24-d12c7fc70444.png)

**A2019**
「オブジェクトのプロパティ」の中の「Technology Type:」ラベルの右側に記載があります。(下記の場合は「HTML」)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479715/c2e11335-d098-477c-b6d1-bd9f232591c9.png)

# 標準(Standard)テクノロジー
1) Windows アプリケーションであれば、**Name、Class、Type、Path**を検索条件としてください。(つまり双眼鏡マーク (![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479715/bc330705-e8d0-e5d9-fe1f-69e301e904bb.png))をつける)

2) Webアプリケーションであれば、**Name、Type、Path、HTML ID、HTML Name、HTML Tag**を検索条件としてください。**HTML Href**や**HTML InnerText**は条件から外し、**Value**は内容が不変である場合にのみ検索条件とするかワイルドカード (\*) を使ってパターンマッチングを行ってください。また、**Path**は内容が不変でない場合は検索条件から外してください。

# HTMLテクノロジー
**Path、DomXPath、HTML ID、HTML Name、HTML Tag、HTML Type、HTML Title**を検索条件としてください。ただし、**Path**は内容が不変でない場合は検索条件から外してください。

ちなみに、検索条件の話ではないですが、HTMLテクノロジーを使っている際によくハマるポイントです。正常に動作していないと思ったら以下の事を確認してみてください。

* Internet Explorer を使う際にはIE プラグインが正しくインストールされているかを確認してください。Google Chromeを使う際にはChrome 拡張機能が必要です。
* Object CloningがIEでうまく動かないときはIEの設定を既定の状態に戻してください。
* オブジェクトキャプチャ時のオブジェクト選択のハイライトの範囲が正しくない場合は、IEの拡大率を100%にしてください。
* クロスドメインのつくりになっているコントロールはキャプチャできません。
* アクションについては　”Left Click"を使っている場合は代わりに "Click"を使ってください。 "Click"の方がより信頼性があります。
* "Set Text"を使う場合、Javascript等で特別な動作がない場合は遅延時間はゼロで使ってください。キーストロークによってJavascriptがバックグラウンドで動くなどの場合は適切なインターバルを取ってください。

# Java Accessibilityテクノロジー
**Name、Type、Path**を検索条件としてください。

検索条件の話ではないですが、Java Accessibilityテクノロジーを使っている際によくハマるポイントです。正常に動作していないと思ったら以下の事を確認してみてください。

* JREに対応する適切なJava Pluginが設定されているかを確認してください。
* JavaアプリケーションとAutomation Anywhereが同様のアクセス権で動作していることを確認してください。(管理者権限同士、もしくは通常権限同士)

# Flexテクノロジー
Flex Web/Desktopアプリケーションでは、**Name、Value、Class、Type、Path**を検索条件に指定してください。**Index**は条件から外してください。また、**Name**は内容が不変でない場合は検索条件から外してください。

検索条件の話ではないですが、Flexテクノロジーを使っている際によくハマるポイントです。正常に動作していないと思ったら以下の事を確認してみてください。

* Flex Pluginが正しくインストールされていることを確認してください。
* `"%homedrive%%homepath%"`がネットワークドライブでないことを確認してください。
* Flexソフトウェアを起動する前にAutomation Anywhereが起動されているか確認してください。 

# すべてのテクノロジー共通のベストプラクティス

* **Path**と**XDOMPath**以外はフィールド内でワイルドカード (\*) が使えます。動的に内容が変化する場合は変わらない部分とワイルドカードを使ったパターンマッチングも試してください。たとえば、ウィンドウタイトルが見つからない場合、Titleに格納されている文字列の前後にワイルドカードを入れてみてください。(例: "\*Microsoft Excel\*"、"\*無題 - メモ帳\*")
* **Set Textアクション**を実行する場合、すべてのアプリケーションで、遅延時間はまず0msで試してください。これで1つのマシンで動作すれば、他でも正常に動くはずです。遅延が0msの時はSet Textアクションはコントロールのプロパティに直接値を書き込むからです。コントロールが外部スクリプトによって制御されている場合、デスクトップアプリなら50ms以上、Webアプリなら100ms以上の遅延を設定してみてください。遅延が0msより大きいときは、Set TextはキーストロークをAAからOSに渡してコントロールにリレーします。そのためアプリケーションからの応答が遅いときは遅延を優文採る必要があります。

# 最後に
これらのデバッグテクニックが皆様のお役に立てば幸いです!

この記事の内容はAA社の「[Best Practices for Object Cloning Command](http://rpademo.automationanywhere.com/resources/Object%20Cloning%20Best%20Practices.pdf)」を参考にしました。