(初心者向け)【UiPath】エラー解決へ向けたポイント・コツその③_エラーメッセージウィンドウ前編

# 概要
ここでは、普段私がUiPathでワークフローを作成していて、エラーが発生してしまった際に、
解決していくまでに、見ているポイント等についてまとめています。

- エラーメッセージウィンドウが出たけど、何からしたらいいか分からない
- エラーメッセージが表示されたけど、何を言ってるか分からない
- このエラーどうしたら解決できるかわからない

っていう方に向けて、少しでもご参考になれば幸いです。

では、参りましょう！

**使用した環境**
下記の説明(画像)で使用している
 UiPath Studioは、コミュニティライセンスのバージョン2020.2.0-beta.108のものです。


### UiPath Studioでのエラーの表示形式について
ここでは、UiPath Studioで表示されるエラーメッセージの表示形式を下記の2種類に分けて考えています。

**<エラーの表示形式>**
**1.エラーマーク：**　
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/614942/47eda393-9e9a-70b4-3775-b99af1af0b04.png)

**2.エラーメッセージウィンドウ：**　
　![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/614942/46f20929-fea7-b5b6-3e5d-73820e6b1926.png)

今回は上記のうちの、2つ目の「**エラーメッセージウィンドウ**」におけるエラーメッセージの確認方法や、
エラー要因を特定する際のポイントについて取り上げていきます。
1つ目の「エラーマーク」について詳しく知りたい方は、以前の記事(↓)をご参照ください！
[エラー解決へ向けたポイントその①_エラーマーク編前編](https://qiita.com/chi_inamori/items/210d4f5f07af8e5f1092)

# エラーメッセージウィンドウ

![エラーメッセージサンプル](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/614942/8275fd42-b518-be60-3624-437f23dee4ec.png "Sample:エラーメッセージ")
ここでいう「エラーメッセージウィンドウ」とは、ロボット実行して何かしらの理由でエラーとなったら表示される
上記のようなポップアップウィンドウを指しています。

どのアクティビティでどんなエラーであっても、以下のような構成で表示されています。
![エラーメッセージ構成](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/614942/340e3d75-3424-c016-d757-a2c370c228d6.png "エラーメッセージ構成")

①ソース：
エラーが発生した場所(アクティビティ)を示しています。
<details><summary>ちょっとしたPOINT:point_up:**アクティビティの表示名について**</summary>
エラーメッセージのソース部分にて表示されているのは、「アクティビティの表示名」となっています。
各アクティビティの表示名は変更できますので、
各アクティビティの表示名を「どういう操作をしているか」が分かる名前にする等、
ワークフロー内でなるべくユニークな名前になるよう設定しておくと、
同じようなアクティビティを使っていたとしても、エラー発生場所が特定しやすくなります。
例>　[クリック]アクティビティの場合：
　　　X  クリック
　　　O「保存」ボタンをクリック
:point_up:アクティビティの表示名の変更は、アクティビティ名部分をダブルクリックする、
あるいは、アクティビティのプロパティ>その他>表示名の欄にて行うことが出来ます。
詳細は以下サイトもご参考ください。
- [見やすいワークフロー作成①_アクティビティ表示名変更](https://qiita.com/asamin22/private/dd0442f8d69ffdc61a01#2%E3%82%A8%E3%83%A9%E3%83%BC%E7%AE%87%E6%89%80%E3%82%92%E8%A6%8B%E3%81%A4%E3%81%91%E3%82%84%E3%81%99%E3%81%8F%E3%81%AA%E3%82%8B)
</details>

②メッセージ：
上記のアクティビティで、「なぜエラーとなったのか」の理由が示されています。

③例外の型：
発生しているエラーの種類(例外の種類)を示しています。

<details><summary>例外について詳しく知りたい方は、、</summary>UiPath公式ガイド([ビジネス例外とアプリケーション例外](https://docs.uipath.com/orchestrator/lang-ja/docs/business-exception-vs-application-exception))をご参照ください。
※上記は、エンジニア向けっぽく、どこか分かりづらいと思う方が多いと思いますので、
以下に私が分かりやすいと感じたサイトも一緒にご紹介しておきます。
- コアカワRPAスクール : [UiPathにある例外の種類と取り扱い方](https://koawaka.com/rpa-school/uipath-error-exception/)
</details>


## エラー要因となっている場所を特定する際のポイント
ここからは、エラー要因のあるアクティビティを特定する際のポイントを押さえていきたいと思います。

もちろん、エラーメッセージウィンドウのソース部分が示すアクティビティの箇所に、
エラー要因があることが多いですが、

エラーメッセージウィンドウのソース部分が示すアクティビティの箇所には
そういったエラー要因がないことも少なくないです。

なぜならエラーメッセージウィンドウは、ワークフローを実際に実行してみたところにおいて、
エラーと判断され表示されるものであるため、エラーとなったアクティビティなどの種類によってもですし、
連携するシステムやネットワーク環境の影響等、エラーマークが表示される時とは異なり、
より様々な要因が発生する可能性があるためです。

そのため、一筋縄では解決できないこともしばしばです。。

ただ、以下のポイントを押さえれば、簡単なものくらいは
誰でもエラー要因場所の特定できるようになるはずです！！:muscle:

今回は、そういったエラーメッセージウィンドウのソース部分で示されたアクティビティ以外に
エラー要因がある場合における、その特定方法について、私なりのポイントをお伝えできればなと。。

##注意ポイント
私がエラーメッセージウィンドウが出た際に、意識しているポイントは、

「**そもそも前の処理まで期待通りに動いていたかを確認する**」ということです。

そして特に、「期待通りであるか」といった点でよく確認する部分は以下2点です。

①ひとつ前の処理で表示されるべき、**ウィンドウやボタン等はきちんと表示されている**のか
②使用したい**変数等の値**がひとつ前の処理までに**きちんとセットされている状態である**か

上記の2つの項目のうち、どちらかでも、きちんとされていない場合は、
エラーメッセージウィンドウのソースで示されているアクティビティの設定ばかり見ていても問題の解決は難しく、
ひとつ前までの処理や変数の値に要因があると疑ったほうがいいかもしれません。


###①ウィンドウやボタン等はきちんと表示されているのか
こちらは、以下のようなエラーメッセージウィンドウであったとき、疑う必要があります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/614942/e659e350-82e3-1dc2-9e22-57431307a5c5.png)

「このセレクターに対応するUI要素が見つかりません」
これは、ソース部分で指定されているアクティビティのセレクター要素を見つけることが出来なかったというエラーです。

これだけを見てしまうと、ソース部分で示されているアクティビティのセレクター要素が悪いのかなと思い、
セレクターを再度取り直しがちになりますが、

取り直す前に、ソース部分で示されているアクティビティにて指定したいウィンドウやボタンが、
エラー直後の画面にきちんと表示されているかを確認してみてください。

止まる直前の処理が上手く実行できていないと、
次の処理で「アタッチしたいウィンドウ」であったり、「クリックしたいボタン」が表示されていないので、
ソース部分で示されているアクティビティは指定された要素を見つけられない状態になっている、
つまりエラーが表示されます。

従って、選択したいウィンドウやボタンがきちんと表示されていなかった場合は、
なぜひとつ前の処理が正しく処理されていないのか、そちらの要因を見つけることが重要になります。


###②使用したい変数等の値がきちんとセットされている状態であるか

こちらは、データテーブル型変数や、配列型変数、List型変数といったコレクション型の変数を使用した場合に、
特に注意していただきたいポイントになります。

例えば、以下のようなエラーメッセージの時は、変数や設定した値が間違っていないかを確認してください。
(1)「列"～"はDataTableに属していません。」
　![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/614942/b1384afb-9a50-133f-71be-31eb8a8e80d7.png)
(2)「インデックスが配列の境界外です。」
　![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/614942/0e4a0c11-441d-2bc3-5fc5-2be55ad9ea09.png)

(1)も(2)の場合も、ソース部分に記された[代入]アクティビティでセットしている値が間違えている場合もありますが、
それぞれそのアクティビティの前の設定が間違えている可能性もあります。

(1)の場合だと、[代入]アクティビティで指定した列名や列インデックスを間違えて指定している場合もありますが、
読み込みに設定しているExcelファイルのパスが間違えていたり、データテーブル型変数を別のものとしていたり等、

また、(2)の場合は、指定した配列型変数の中に値が期待通りセットされていない場合等は、
[代入]アクティビティで正しいインデックス値をセットしていても実行するとエラーになります。


きちんと各変数や引数にその時、期待する値が入っているのか、確認する方法としては、
エラーとなるアクティビティに[ブレークポイント]を置き、**デバック実行**をしてみることをお薦めします。

なぜそうするのかと言いますと、
[ブレークポイント]を置いてデバック実行すると、[ブレークポイント]を置いた場所で処理を一時停止できるのですが、

一時停止したタイミングで、UiPath Studioの画面に、「ローカル」というパネルが表示されます。
![ローカルパネル例](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/614942/167b383c-60c3-0e78-c0e3-968ae0b2d338.png "ローカルパネル例")

ローカルパネルでは、その一時停止した時点での各変数の値を確認することができるので、
エラーを発生するアクティビティが実行される直前の変数の値を確認することが出来ます。

確認していただくと、値がNull(空白)であったり、期待値通りでない値が入っていたりするならば、
エラーとなるアクティビティではなく、変数に値を入れる箇所の設定をもう一度確認してみましょう。

デバック実行(機能)やローカルパネルについて詳しく知りたい方は、それぞれ 
・UiPath公式ガイド([デバックについて](https://docs.uipath.com/studio/lang-ja/docs/about-debugging))
・UiPath公式ガイド([ローカルパネル](https://docs.uipath.com/studio/lang-ja/docs/the-locals-panel))
ご参照ください。
※UiPath公式ガイドでは、参考動画があるので、どのように扱えばいいかある程度イメージしやすいと思います。

#まとめ
エラーメッセージウィンドウが表示されたら、
- ソースに表示されているアクティビティ(エラー発生場所)を確認する
- 上記で確認したアクティビティにて処理する時点までは、期待通りの流れになっているかを確認する

上記2点を抑えることで、エラー解決しやすくなるのではないでしょうか。

##最後に
ここまでお読みいただきありがとうございます。

次回は、よくあるエラー例をもとに、解決方法の一例をお伝えします。
そちらも併せてご覧ください。
* [(初心者向け)【UiPath】エラー解決へ向けたポイント・コツその④_エラーメッセージウィンドウ後編](https://qiita.com/chi_inamori/items/417dc9db084f7fb20143)