WinActorシナリオ作成の基礎:例外処理

シナリオ実行中のエラーをゼロにすることは難しい

WinActorのシナリオを実行している際途中でエラーが表示され、シナリオがストップする場合があります。

画像1:エラー表示

エラーは様々な場面で起こりうるもので、
・回線の調子が悪く、WEBページの読み込みに通常よりも時間がかかった
・フォルダ構成が変わった
こういった事で、エラーが出てシナリオが停止する可能性があります。

上記のような問題は
・待機時間を十分に取っておく
・変数を多用する
等、シナリオのチューニング・作り方で出来るだけ回避する事はできますが、ゼロにすることは困難です。
従って、エラーが出ることはある程度仕方のないこととして、エラーが出た場合に別の処理を実行させることで対処するのが良いでしょう。

「例外処理」のノードを使用する

エラーが出た場合にシナリオを分岐させるノードとして、「例外処理」があります。

画像2:「例外処理」

「例外処理」は「分岐」と類似した構成になっており、
「正常系」と「異常系」の2つのフローを持っています。
構造としては、「正常系」の中に入っているノード・ライブラリの処理中にエラーが起こった場合、「異常系」のフローに進むようになっています。
「例外処理」のプロパティは、本記事では設定する必要はありません。

「正常系」に使うシナリオとして、本サイトの下記記事で作成したシナリオを用います。

リンク:WinActorシナリオ作成の基礎 ChromeでWEBページのXpathを取得し、WEBページにログインする

画像3:元シナリオ

このシナリオは「Xpathを用いてWEBサイトにログインする」という簡単なものです。
エラーは偶発的に発生するものなので、テストのために、エラーを起こすライブラリ「02_エラー処理 エラー」をシナリオ内の「ページ表示」のライブラリの下に追加します。

画像4:「エラー」

ライブラリ「エラー」のプロパティは下記のようになっています。
エラーメッセージの「値→テスト」と設定します。

画像5:「エラー」のプロパティ

この設定で、必ず「エラー」のノードでWinActorは停止します。
実際に実行してみますと、エラーが出るのが確認できます。

画像6:エラーが出る

エラーを起こす設定ができたので「例外処理」のノードをシナリオに組み込んでいきます。
「例外処理」を一番上に移動し、正常系のグループ内にすべてのノード・ライブラリを移動します。

画像7:組み込み

移動が完了すると、シナリオは下記の状態になります。

画像8:「正常系」フローの中にすべてのノードを入れる

エラーが出た場合に「異常系」フローに進むのは、「正常系」フロー内に入ったノードが実行中の場合のみです。つまり、シナリオの最初から最後までを「正常系」フローの中に入れると、どの部分でエラーが出たとしても、「異常系」に進む設定になります。

また、「異常系」のグループ(「アクション例外」グループ)に何もノード・ライブラリがない場合、そのままシナリオは終了となります。
今の設定ですと、シナリオは下記のフローとなり、操作はエラーが起きる直前の状態で止まり、以降のノードは実行されません。

画像9:エラーが起こった場合のフロー

サンプルのシナリオですと、WEBサイトが表示された状態で停止しています。
もし、エラーが起こる可能性が高い場所がわかっていれば、その部分だけ例外処理として対応する事もできます。
シナリオをすべて「正常系」フローに入れる場合と異なり、この場合は後続処理が続く事になります。エラーの対処方法を「アクション」グループに組み込めば、エラーを回避しつつ、元の正常系フローに復帰することが出来ます。

画像10:エラー回避の操作を入れる

エラーを記録し、メールで通知する

エラーが起こった場合、「例外処理」にてそれを回避するだけではなく、通知することも可能です。
エラーが起こった場合にエラー内容を記録し、メールで通知する方法を説明します。
シナリオを画像3の状態に戻して説明します。

「02_エラー処理 エラー情報収集」のライブラリを使います。

画像11:「エラー情報収集」

「エラー情報収集」のライブラリは、グループ化されており、ライブラリからドラッグ・アンド・ドロップした状態では閉じていますで、 +を押してグループを展開します。
「エラー情報収集」の中身は「例外処理」のに、予めエラー情報収集のためのノードが追加されたものになっています。
「正常系」フローに組み込まれた「エラーサンプル」は、前述した「エラー」と同じもので、テスト用にエラーを起こすものです。

「エラーサンプル」には最初から「エラーメッセージ」の項目に値が設定されていますが、このままにしておくとプロパティ未設定の扱いになりますので、任意の値に設定します。ここでは「値→エラーテスト」としました。

画像12:「エラーサンプル」

続いて、「異常系」フロー内の「エラー情報収集」のプロパティを開きます。
こちらのノードには、
・「エラー発出ノード名」
・「エラー発出ノードID」
・「エラーメッセージ」
の3つの項目があり、「エラー情報収集」のライブラリを設置すると、同名の変数が自動で作られます。

画像13:「エラー情報収集」のプロパティ

画像14:変数が作られる

「エラー情報表示」のノードは「待機ボックス」のノードですので、「エラー情報収集」の変数をポップアップで通知します。
今回は、メール通知しますので本来は不要ですが、後ほど結果を確認するため、残しておきます。

続いて、メール送信の処理をする前の準備をします。
「エラー情報表示」では3つの変数が記録されますが、メールの本文に設定できる変数は1つなので、3つを1つの変数に結合する必要があります。
ここでは「07_文字列操作 文字列の連結(5つ)」のライブラリを使います。

画像15:文字列の連結(5つ)

「文字列の連結(5つ)」のプロパティを設定します。
エラー情報の変数は3つなので「文字列連結(3つ)」でも良いのですが、文字に区切りがなく繋がってしまうため、読みやすいように「文字列連結(5つ)」を用い、2つ目と4つ目を区切りのカンマにします。結合した変数を、ここでは「エラーメール本文」とします。

画像16:文字列連結(5つ)のプロパティ

最後に、メール送信のために「20_メール送信 01_Outlook操作 Outlook メール送信(メーラ起動、停止含む)」のライブラリを用います。

画像17:「Outlook メール送信(メーラ起動、停止含む)」

「Outlook メール送信(メーラ起動、停止含む)」のプロパティを設定します。任意の「宛先」(メールアドレス)、「件名」、「本文」には先程結合した変数を設定します。

画像18:「Outlook メール送信 メーラ起動、停止含む」 プロパティ

「エラー情報収集」内の設定が完了しましたので、元のシナリオ(画像3)を組み込んでいきます。画像9と同様の状態にします。

画像19:元のシナリオを「エラー情報収集」に組み込む

これでシナリオは完成です。実行してみると、エラー情報のポップアップが表示されます。
(実際には、メール送信をする場合は「エラー情報表示」のポップアップは不要です。
)

画像20:エラー情報のポップアップ

メールも、届いていることが確認できます。

画像21:エラーメール

本シナリオの動画もアップロードしますので、ご確認ください。

動画:「例外処理」

「例外処理」を使うことで、長時間かかるシナリオの実行時や、タスクスケジューラで夜間実行する場合など、目視していない状態でシナリオを実行する場合にも、問題の発生を認識し、通知することが出来ますので、ぜひ、ご活用ください。

 

筆者プロフィール

H.S
H.Sビーブレイクシステムズ
営業職。カレーが好きです。得意技は福岡日帰り出張。

業務の自動化を実現する「WinActor」

WinActorは純国産RPAソリューションです。Excel、ブラウザ、業務システム等、Windows端末から操作可能なアプリケーションの操作をシナリオとして学習し、PC操作を自動化するソフトウェア型のロボットです。WinActorで業務の自動化を実現しませんか?

製品サイトではWinActorのシナリオを実行した動画などを数多くご紹介しています。ぜひご覧ください。