「シナリオを実行したときにエラーが起きました」というご相談を受けることがよくあります。
エラーとは切っても切れない関係。
どんなに手を尽くしても、一生エラーが一度も起きないというシナリオを作るのはなかなかに難しいことだったりします。
エラーを失くす(減らす)ための対策としては様々やり方がありますが、今回はその中でも
エラー対策については以下の記事もご参照ください。
0.事前に確認すること
お客様から「エラーが起きた」とご連絡を受けたとき、私は大体次のことをお聞きしています。
1.どのノードでどんなエラーが起きていますか?
2.何度やってもエラーが発生しますか?
(起きたり起きなかったりですか?)
3.エラーはいつも同じノードで起きていますか?
お聞きする意図は、ざっくり以下の通りです。
1.どのノードでどんなエラーが起きていますか?
⇒エラーを起こしているノードとエラーメッセージが分かると、ある程度原因や対策に見当がつく場合があります。
もちろんそれだけではわからない場合もあります。
2.何度やってもエラーが発生しますか?(起きたり起きなかったりですか?)
⇒何度やっても同じノードでエラーで止まるなら、ノードの設定が間違っているかもしれませんし、
止まらない場合もあるなら設定自体は間違っていないのかもしれない、とあたりを付けることができます。
3.エラーはいつも同じノードで起きていますか?
⇒こちらもノードの設定自体に誤りがあるのか、別の要因かを見極めるためにお聞きしています。
ノードの設定が誤っている場合はその設定を修正すればエラーを解消できるのでいいとして、
問題は
・部分実行ではうまくいくのに、最初から通して実行するとできない
・うまくいくときとエラーが起きるときがある
・エラーを起こすノードが固定ではない
という場合です。
うまくいくときもあるならノード自体の設定は問題なさそうです。
では何が問題なのか、そう思ったときに一度
待機時間の必要性
WinActorは一部のノードを除いて、「待つ」という機能がありません。
例えば、あるWebサイトを開きログインして、トップページから【発注】というメニューをクリックさせるとします。シナリオに起こすと以下のようになります。
ログインのWebページを開く処理をした後、そのページを表示し文字の入力ができるようになるまで、少し時間がかかるようなWebサイトは多いと思います。
かかる時間はネットワーク回線の速度やそのWebサイトの仕様等にも影響されるので、固定ではありません。
上図で「ログインIDを入力する」のに使っている「値の設定」ノード(ライブラリ▸23_ブラウザ関連)には
タイムアウト設定(※後述)が付いているので、その設定時間までは待つことができますが、
タイムアウトを超えても値設定のための要素が見つからないとエラーになってしまいます。
また、ログインボタンをクリックした後、トップページが表示され
次の操作ができるようになるまでにも、少し時間がかかる場合がありますね。
タイムアウト設定があるのでその時間までは待ちますが、
その時間を過ぎたら
次のノードの実行ができる状態になるまで待てなかったことによるエラーは、たびたび目にします。
そこで
待機をさせることによって、
これによって成功率を上げることができます。
待機にも場面によって様々なやり方がありますので、ノードと使うシーン例を併せてご紹介していきたいと思います。
POINT タイムアウト設定のあるノード
WinActor Ver.7.3.0からは以下のノードでタイムアウトの設定が可能になっています。
・ライブラリ▸04_自動記録アクション配下のIEおよびUIオートメーション関連のライブラリ
・ライブラリ▸23_ブラウザ関連配下のブラウザ操作関連ライブラリVer.7.4.0からは更に追加され、かなり多くのライブラリでタイムアウトの設定ができるようになりました。
新しいバージョンを使っている場合は、ノード自身のタイムアウト設定のみで問題ない場合もあるかと思いますが、うまくいかない場合はぜひ下記内容も試してみてください。
1.画面の遷移には「ウィンドウ状態待機」
ログイン後、トップページが安定するまで待機させたい場合など、
「画面遷移が伴う場合」に有効なのが
※ノード▸アクション
このノードは画面の変化を検出するまで待機することができますので、
ログイン後、次のページが表示されるまで待ちたい場合などに使います。
▲ログインに時間がかかるときがあるならタイムアウト設定を長めに設定しておく。
POINT
このノードは「画面の変化」で設定した状態になったかどうかの判定を、どのように行っているかが分かりません。
そのため、実際の画面はまだ操作ができる状態になっていないのに、Trueで先に進んでしまうこともあります。
試してみてうまくいかない場合は、ウィンドウ状態待機+後でご紹介する「指定時間待機」を組み合わせたり、別方法で待機させることも必要になってきます。
2.ブラウザ操作に関しては「読込完了待ち」
ブラウザ操作に関しては、専用の待機系ノードが用意されています。
※ライブラリ▸23_ブラウザ関連▸04_待機
このノードはWinActor Ver.7.4.0から実装されたノードですので、
Ver.7.3.1以前のWinActorをお使いの場合は使うことができませんが、
デスクトップ上のブラウザが読み込み完了状態になるまで待つことができます。
POINT
ブラウザ操作方法を「拡張機能」を選択している場合のみ使用できます。
オプション▸ブラウザの設定で「Webdriver」を選択している、
もしくは「シナリオ情報」設定で「ブラウザ操作にWebdriverを利用する」にチェックを入れている場合は、ブラウザが常に読み込み完了済みとみなされてしまうため、待機させることができません。
▲オプションでのブラウザ操作方法の設定
▲オプションで拡張機能に設定していても、シナリオ情報画面でチェックがついていると「Webdriverを利用する」と認識される
▼ブラウザ操作方法の「拡張機能」「Webdriver」については、こちらをご参照ください。
WinActorのバージョンがVer.7.3.1以前を使っている場合や、
Webdriverを利用してブラウザ操作を行っている場合は、別の方法を選択する必要があります。
3.待ち時間を自分で設定できる「指定時間待機」
画面の遷移があるわけではなかったり、読み込みに時間がかかったりするわけではないが、
WinActorの動きが早すぎて失敗することがあるので、少しだけ待たせたい、といった状況もよく起こります。
そういった場合は
※ノード▸アクション
このノードは操作したい画面の状態に関わらず、設定した時間を必ず待つというものなので、
例えばデータのコピー&ペーストをした後、次の操作に移る前に少しだけ待たせたい、といったときに使うことができます。
私の場合は、ウィンドウ状態待機ノードと組み合わせて使ったり、エミュレーションの前後に配置して使うことが多いです。
あとは「指定した時刻まで待つ」と設定して、任意の時刻に続きの処理を開始したい(終了したい)ときに配置したり、「指定時刻チェック」を使って、このノードの実行時刻が設定した時刻かどうかのチェックをおこなうこともできます。
4.「画像マッチング」を使って待機
システムで検索結果が表示されるまで待たせたい、といったときなどもよくあります。
例えば画面は変わらないし、オンプレ型のシステムなので読み込み完了まで待たせる手段もない、
検索にかかる時間はまちまちなので、指定時間待機もできれば回避したいという場合に、
「画像マッチング」は、予め指定した画像が、ウィンドウ上にあるか判定し見つけた場合に
クリックなどのアクションを行うというものです。
ボタンのクリックによく使いますが、上記のような場合に待機させる役割で使うこともあります。
上図の例でいうと、検索が終わり結果が表示されたかどうかは、
表に値が入ったかどうかでしか判断ができないので、そこを画像マッチングでキャプチャしておき変化を確認します。
ただ、検索結果として表れた内容は実行するときによって異なる可能性が高いのでキャプチャするのは検索前の状態です。
更に繰り返し・分岐を組み合わせて使うと、キャプチャした状態が現れるまで(もしくはその状態でなくなるまで)待機と、状態チェックを繰り返しさせることができるようになり
5.シナリオ開発中に重宝する「待機ボックス」
シナリオ開発中は、ノードの編集⇒動作確認⇒修正をくりかえして作っていくことかと思いますが、その際に大活躍するのが
待機ボックスは、一時停止させるノードです。
※ノード▸ユーザ
値の取得が成功しているかを確認するときに待機ボックスを配置して実行すると、一時停止中に変数一覧で正しく値取得ができているかを確認することができます。
また、一旦完成したシナリオにおいて不具合があったときに、
どこで問題が起きているか確認するために、間に数か所待機ボックスを置いて「ここまでは問題なし」と確認できるように使うこともありますね。
待機ボックスを使うと人が「OK」をクリックするまで、ずっと一時停止しているという性質上、使うのはシナリオ開発中のみで、完成したら外すという使い方をしている方が多いと思います。
しかし、例えばエラーが出たときにユーザーに知らせるために、例外処理の異常系に置いたり、
シナリオの最後に配置して正常終了したときに、デスクトップ上にメッセージを表示させるという使い方も見たことがあります。
終わりに
部分実行で細切れに実行していく分には問題なく動くのに、通して実行するとエラーで止まってしまう。
そういった場合にはぜひ一度待機時間を設ける、あるいは延ばすことを検討してみてくださいね!
最後までお読みいただきありがとうございました。
また次回お楽しみに!
▼こちらもおすすめ