はじめに
UiPathに限ったことではないが多くのRPAで発生しやすいエラーが、Webサイトやアプリ上のボタンなどをクリックしようとして、見つからずにタイムアウトしてしまうケース。
確かに表示されているはずなのに、実行すると「UiPath.UIAutomationNext.Exceptions.NodeNotFoundException: このアクションのユーザー インターフェイス (UI) 要素が見つかりませんでした。」と表示されてしまう。
UiPathでこういったエラーを極力回避するためにリトライスコープを組み合わせた方法を紹介する。この方法はクリックに限らずほとんどのUI操作(Studioのアクティビティパネルの「UI Automation」に含まれるもの)に応用することができる。
こんな人向け
- UiPathによるブラウザやアプリ等のUI操作でのエラーを減らしたい人
- より安定動作するUiPathワークフローを作りたい人
- クリックでエラーが起きて困っている人
原因
そもそも「UiPath.UIAutomationNext.Exceptions.NodeNotFoundException: このアクションのユーザー インターフェイス (UI) 要素が見つかりませんでした。」がなぜ起きるかというと、大体の場合以下の2つに当てはまる。
- UiPathで操作したいターゲットがあるウィンドウ(ページ)を認識できていない
- ターゲットがクリックできる状態になるまで読み込まれていない
つまり、人の目からは表示されているように見えても、UiPath的にはまだ存在していない状態でクリックしようとして「そんなのありませんよ!」というエラーが出ているということ。
このエラーを回避するためには、ターゲットが確実に表示されてクリックできる状態になるまで待ってからクリックに進む必要がある。
方法
ややバージョンが古いが現行のバージョンでも問題ない(はず)。
全体像
最初のクリックは目的のページ(ターゲットがある画面やページ)に移動するためのもので、重要なのはその下のリトライスコープとその中身。
①「リトライスコープ」アクティビティ
「リトライスコープ」アクティビティとは、ざっくり言うと指定した「リトライの回数」分だけ「アクション」内が成功するまで繰り返すもの。アクティビティの詳細はこちらを参照。
プロパティは下記の通り設定する。
- リトライの回数:自動化する業務に合わせて任意で指定
- リトライの間隔(次のリトライまでに待つ時間):自動化する業務に合わせて任意で指定
- その他:デフォルトのまま
例えば、読み込みにかなり時間のかかるWebサイトやアプリを使用しているなら、「リトライの間隔」を「00:00:05」(5秒)に設定する。それでもうまくいかない場合時間を調節しながら決めていく。
「リトライの回数」に関しては、『これだけの回数繰り返してだめなら諦めよう』と判断する回数だと思ってもらえれば。何回繰り返してもだめなら、そもそものエラーの原因が前述の「原因」ではない可能性があるのでより細かくデバッグして原因を特定する必要がある。
②「要素が出現したとき」アクティビティ
「要素が出現したとき」アクティビティとは、指定したUI要素(Webサイトやアプリ上の図やボタンなど)が取得できたら「Do」を実行するもの。アクティビティの詳細はこちらを参照。
「Do」内でターゲットの確認結果としてBoolean型変数にTrueを格納させる。
プロパティは下記の通り設定する。
- アクティブ化を待つ:True
- 表示されるまで待つ:True
- タイムアウト:0
- 準備完了まで待機:COMPLETE
- エラー発生時に実行を継続:True
- その他:デフォルトのまま
この設定により、ターゲットが見つからなかった(まだ読み込まれていなかった)場合はすぐに後述の「Trueか確認」アクティビティに進み、エラーを発生させて次のリトライに入るようになる。
本記事のワークフローは少し古いバージョンで開発したものであるため、「要素が出現したとき」アクティビティを使用している。現在このアクティビティはクラシックアクティビティとされており、現在はモダンアクティビティの利用が推奨されているため、これから新規に開発したり改修する場合は代わりに「要素を確認」アクティビティを使うことをおすすめする。
③「Trueか確認」アクティビティ
「Trueか確認」アクティビティとは、入力された式が「True」であるかを確認するもので、「True」でない場合はエラーを返す。アクティビティの詳細はこちらを参照。
プロパティは下記の通り設定する。
- 式:「要素が出現したとき」アクティビティで設定したBoolean型変数
- エラーメッセージ:わかりやすい任意のメッセージ(例:○○ボタンが見つかりませんでした。)
- その他:デフォルトのまま
ここで式に設定した変数が「False」(ターゲットが見つからなかった)場合は、エラーを発生させ、リトライスコープに戻り、次のリトライに入ることになる。
「True」(ターゲットが見つかった)だった場合は次に進む。
④ターゲットをクリック
ここでやっと目的のターゲットをクリックする。①~③の流れをクリアしてきたら大体の場合で問題なくクリックできる。
コメント