【UiPath】タイミングが合わずに空振るときの対処方法
タイミングが合わずに空振るときの対処方法を紹介します。
クリックをしたいのにまだ画面が表示されていなくてクリックが空振ってしまい、エラーとなってしまう場合などです。
ファイルダウンロードなどで表示されるバーをクリックするときなどによくあったりします。
方法はいろいろあるのでいくつか紹介します。
①Delay(アクティビティ)
Delayという少し待つというアクションをいれます。
Activities>Available>System>Activities>Statements>Delayを空振る可能性のあるアクティビティの前に入れます。
PropertiesのDurationに待ち時間を入れます。(00:00:01で1秒)
これだけでクリックの前に3秒の待ち時間が入ります。
②Delay(プロパティ)
①と同じDelayですが、各アクティビティのプロパティで設定します。
例えばClickアクティビティで
PropertiesのDelayAfterとDelayBeforeに以下のように数字をいれます。
上記の例だと、クリックの前に3秒、クリックの後に1秒の待ち時間が入ります。
③TimeoutMS
②と同じくプロパティの設定となります。
基本的にアクティビティは30秒待って見つからなければエラーとするので、その30秒を延ばします。
PropatiesのTarget>Timeoutのところに数字をいれます。(何も入力しないと30000となっています(30秒))
上記の例だと、エラーになるまで60秒待ちます。
Delayは必ずその時間待ちますが、Timeoutの場合は見つからないときのみ待ちます。
④On Element Appear
Activities>Available>UI Automation>Element>Event>On Element Appearを選択します。
Indicate on screenで表示されるまで待ちたい要素を選択します。
次の画面に遷移するまでクリックを待ちたいのであれば、次の画面の要素を選択。
ポップアップが表示されるまで待ちたいのであれば、ポップアップの要素を選択。
また、デフォルトではPropertiesのRepeatForeverがTrueになっていて、このアクティビティが永続的に続きます。
1度の表示で終わらせたいのであればFalseに変えましょう。
上記の例では、testというフォルダが開かれると、メッセージボックスが表示されます。
デフォルトではTimioutMSが30秒になっているので、最大30秒しか待たずに、対象の要素が表示されないとエラーになってしまうので
30秒以上待つ必要がある場合は、PropertiesのTimioutMSを30000以上にしましょう。(30000で30秒)
ちなみにOn Element Vanishというアクティビティを使うと選択した要素が消えた場合に次の処理が行われるようになります。
下記例では、testというフォルダが閉じられると、メッセージボックスが表示されます。
⑤Find Element
Activities>Available>UI Automation>Element>Find>Find Elementを選択します。
④とほぼ同じですが、Indicate on screenで取得した要素が表示されるまで待ちます。
上記の例ではtestフォルダが表示されるとメッセージボックスが表示されます。
またこれも③と一緒で30秒以上はエラーとなるので、必要であればTimeoutMSを調整しましょう。
⑥Element Exists
Activities>Available>UI Automation>Element>Find>Element Existsを選択します。
これはIndicate on screenで選択した要素があるかどうかの結果を返します。
PropertiesのOutputのExistsにBoolean型の変数をセットします。
選択した要素があればTrue、なければFalseを返します。
単体ではあまり意味がないので、Flowchart内でDecisionとあわせて使います。
Element Existsの結果を見て、Trueであれば次の処理、Falseであればまだ表示されていないということになるので
もう一度Element Existsの処理をしに戻ります。
DecisionはPropertiesのConditionにElement Existsで設定したBoolean型の変数をセットします。
そして右のFalseの矢印はElement Existsへ、左のTrueの矢印は次の処理へ繋げます。
これで、対象の要素が表示されるまで繰り返します。
Element ExistsのTimioutMSのデフォルト値は3秒なので、変更しなければ3秒ごとに確認します。
ただ、要素が表示されない限り永遠に繰り返してしまうので、3回繰り返したら終わり、など条件を入れた方がいいこともあるかもしれません。
⑦Retry Scope
Activities>Available>Workflow>Control Flow>Retry Scopeを使用します。
機能としてはElement Existsと同じようなことが1アクティビティでできます。
詳細は以下をご参照ください。
【UiPath】Retry Scopeの使い方
以上、タイミングが合わずに空振るときの対処方法でした。
いろんな方法を試して、一番その処理に合う方法を入れていくのがよいかと思います。