【UiPath】ブラウザー操作の自動化で遭遇するエラーの原因と対策

# はじめに
本記事では、UiPathを使ってブラウザー操作を自動化した際に発生するエラーの原因、確認ポイントまたは解決策について書いていきます。

# よく発生するエラー
## 1. ブラウザーと通信できません。UiPath 拡張機能をご確認ください
英語メッセージ : **Cannot communicate with the browser, please check the UiPath extension.**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3322296/0910ef20-a9bc-4b2d-79e4-6ebf2e9fcab8.png)

### 原因
``ブラウザーを開く``または``アプリケーション/ブラウザーを使用``アクティビティでブラウザーを起動したがUiPathブラウザー拡張機能の準備が出来ておらずタイムアウトとなった場合に発生します。

### 確認ポイント
#### A. エラーが毎回発生する場合
ブラウザー拡張機能のインストールが正しく行われていない可能性があります。下記を確認いただき、いずれかに該当する場合は、弊社公式ドキュメントのトラブルシューティングをご確認ください。
* ご利用になるブラウザー用のUiPath拡張機能はインストールされていますか？
* ブラウザーが起動している状態でタスクマネージャーを開いたとき、``ChromeNativeMessaging.exe`` というプロセスを見つけることが出来ますか？
* ``ComSpec``という環境変数は定義されていますか？

https://docs.uipath.com/ja/studio/standalone/2023.4/user-guide/chrome-extension

https://docs.uipath.com/ja/studio/standalone/2023.4/user-guide/microsoft-edge-extension-troubleshooting

#### B. エラーが出たり出なかったりする場合
ロボット実行端末のスペックが低い等の理由でブラウザー起動時の初期化処理が間に合わずタイムアウトしている可能性があります。下記のいずれかでエラーが解消するか確認ください。

* UiPath 拡張機能以外の拡張機能を無効にする
* (URの場合) ``ブラウザーを開く``アクティビティの前に``待機``アクティビティを配置する
* (モダンデザインの場合) ``アプリケーション/ブラウザーを使用``アクティビティのタイムアウトプロパティの値を30秒より大きくする。デフォルトタイムアウト値は30秒です
* (クラシックデザインの場合) ``UiPath.UIAutomation.Activities``アクテビティパッケージをアップグレードする
:::note info
下記バージョン以降、``ブラウザーを開く``アクティビティのデフォルトタイムアウト値が **20秒から60秒に延伸**されています。
また、``UIPATH_OPEN_BROWSER_TIMEOUT_SECONDS``環境変数により**タイムアウト値を変更出来る**ようになりました。
:::
| ご利用バージョン | アップグレードバージョン |
|:-:|:-:|
| v23.4.x  | v23.4.4 以上 |
| v22.10.x | v22.10.8 以上 |
| v22.4.x  | v22.4.10 以上 |
| v21.10.x | v21.10.8 以上 |
| v20.10.x | v20.10.13 以上 |

## 2. このセレクターに対応する UI 要素が見つかりませんでした
英語メッセージ : **Could not find the UI element corresponding to this selector.**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3322296/7b30869a-f231-b7a4-3531-9405007de5a2.png)

### 原因
エラーメッセージの通りとなりますが、指定されているセレクターに対応するUI要素を特定することができずタイムアウトとなった場合に発生します。

### 解決策
UI要素を特定できない理由は様々です。下記いずれかで解決するか確認ください。
#### A. セレクターに``idx``や``title``等、実行毎に値が変わる属性が指定されている
* 動的に変わる属性の値をワイルドカードまたは変数に置き換える
* 動的に変わる属性をセレクターから外して、UI要素が一意に特定できるようにアンカーを設定する

#### B. 操作対象のUI要素は特定の条件下でのみ表示される
* ``要素が出現したとき``や``アプリのステートを確認``アクティビティ等を使用して**操作対象が表示されたときのみ該当アクティビティを実行する**ようにする

#### C. ロボット実行端末のスペックが低くてブラウザーの画面描画が遅い
* 該当アクティビティのプロパティ``準備完了まで待機``に``INTERACTIVE``または``COMPLETE``を指定する
* それでも解決しない場合は、解決策Bと同様``要素が出現したとき``や``アプリのステートを確認``アクティビティ等を使用して操作対象のUI要素が表示されてことを確認したのち該当アクティビティが実行されるようにする

下記弊社公式ブログのWaitForReadyの項が参考になります。

https://www.uipath.com/ja/community-blog/tutorials/click-activity

## 3. この UI 要素は有効ではありません
英語メッセージ : **UiElement is no longer valid.**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3322296/8919eccf-9b4a-2d49-c949-3508db6f2323.png)

### 原因
``要素を探す``アクティビティ等から``UiPath.Core.UiElement``型の参照を取得後に画面遷移等によりブラウザ画面構成要素が更新されている状態で、保持している``UiPath.Core.UiElement``型の参照を利用してクリック等の操作を行うと発生します。

### 解決策
``UiPath.Core.UiElement``型の参照を再度取得しなおしてから利用してください。

## 4. UI ノードが無効です
英語メッセージ : **Invalid UI node.**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3322296/bd4a0651-31b5-abe5-4803-c09ca415ce76.png)

### 原因
ブラウザーを起動した時点では存在していたUI要素がブラウザーまたはタブが閉じてしまったため通信が出来ない、ロボット実行端末のスペックが低い、一時的な後負荷状況等の理由で該当UI要素からの応答を受け取ることができない等、何らかの理由によりUI要素を特定することが出来ない場合に発生します。

### 確認ポイント
* ``スクリーンショットを作成``アクティビティを使用して、エラー発生時に該当UIの操作時にブラウザーまたはタブが閉じていないことを確認ください
* ``要素の存在を確認``アクティビティを該当アクティビティの前に配置して操作対象が表示されたときのみ該当アクティビティを実行するようにする
* ``UiPath.UIAutomation.Activities``のバージョンを``v23.4.4``以上にアップグレードすることで事象が改善するか確認ください。このバージョンより、内部通信タイムアウト値が5秒から30秒に延伸されているため救済される可能性があります

## 5. 画面の範囲外にある UI 要素には入力を送信できません
英語メッセージ : **Cannot send input to UI element because it is outside of screen bounds.**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3322296/5e17065f-767b-231f-d8f4-edef13bcdd62.png)

### 原因
入力メソッドに``ハードウェアイベント``を利用している状況下で、操作対象のUI要素が何らかの理由により**画面表示範囲内に表示されていない**ためクリック等の操作に失敗しています。

入力メソッドについての詳細は、弊社ドキュメントをご確認ください。また、UiPath 2021、2022 MVPである@miya_gisさんがとてもわかりやすく纏めてくださっているので是非ご確認ください。

https://docs.uipath.com/ja/studio/standalone/2023.4/user-guide/input-methods

https://qiita.com/miya_gis/items/4fc94d999a016c3d19dd

### 解決策
* 対象アクティビティの入力メソッドを**バックグラウンド実行可能なものに変更してください。** モダンアクティビティの場合は、``Chromium API``または``シミュレート``、クラシックアクティビティの場合は``シミュレート``がおすすめです。
* その他、ワークフロー**開発端末と実行端末の画面解像度及び表示スケールを揃える**ことで本事象が発生しなくなる可能性もあります。

# おわりに
皆様のUiPathでの開発に少しでもお役に立てれば幸いです。本記事で取り扱っていないエラー原因やその他エラーについて情報をお持ちの方がいらっしゃれば是非コメントください。