こんにちは。システムズエンジニアリングセンターの「やまさきあ」です。
業務ではTableau(BIツール)やUiPath(RPAツール)に携わっています。

 

わたしはプロジェクトでRPAの構築を行っているのですが、
ブラウザやデスクトップアプリでの要素(Selector)の認識において、安定して動作を行ってくれないときがあります。

1回目は上手くいったのに、何回かに一度Clickが失敗する…
動作する対象の日付を変えてみたら入力が失敗する…
みなさんもそのような経験、ありませんか?

今回は、そのような際に私たちクレスコのRPAチームがどのようにしてSelector箇所の安定化を行っているかを3点、お伝えいたします。

目次

<その1> WaitForReady を「COMPLETE」にする

Selectorを設定するActivityにおいて、Propertyに “WaitForReady” という項目があります。
これは、ターゲットが準備できるまでActivityの実行を待機するかを設定するプロパティで、「None」「Interactive」「Complete」が選択できます。

None – 待機しない
Interactive – ターゲットアプリケーションのUI要素の一部が存在するようになるまで待機する
Complete – ターゲットアプリケーションのUI要素がすべて存在するようになるまで待機する
詳しくはこちらを参照してください

WaitForReadyは、Defaultでは「INTERACTIVE」に設定されています。
その際、アプリケーションの一部しか読み込めていない状態でActivityを実行すると、Selectorが見つからず失敗してしまいます。
そのようなときには、WaitForReady を「COMPLETE」に変更してみましょう。

そうすると、アプリケーション全体が読み込まれてからActivityが実行されるので、
Selectorで指定した対象の要素を見つけることができます。

<その2> GetActiveWindow を用いる

動作を実行するWindowを指定する際に、読み込む度に対象の要素が変わってしまうことがあります。
その場合は、GetActiveWindowというActivityが使えるかもしれません。

GetActiveWindowはその名の通り、アクティブウィンドウを取得し、その中で複数のActivityを実行できるものです。
実行したいActivityをDoの中に入れましょう。

注意することとしては、Activityを実行する対象のWindowが隠れている場合には利用できないことです。
また、クリック時にSimulate Clickにチェックを入れている場合はWindowがActiveにならないので注意が必要です。

GetActiveWindowを利用すれば、読み込むたびに要素が変化するWindowに対して明示的にSelectorでWindowを指定せずとも動作を実行することができます。この方法も安定化につながる1つの方法でしょう。

<その3> RetryScopeを用いる

時々、Activityの動作が失敗するというときは、RetryScopeを使ってみましょう。

このActivityは、条件が満たされないかエラーがスローされる限り、含まれているアクティビティを再試行します。
動作が失敗する箇所が特定できている場合に使うととても便利です。

再実行のループから抜けたい場合には以下の2パターンで実現できます(どちらか片方でも可)。

  • 再試行回数の指定
    Propertyの”NumberOfRetries”において再試行回数を指定することができます。
  • 条件の指定
    Activity下部の”Condition”に再試行のループを抜ける条件を指定することができます。
    成功後の目印(ブラウザにおける画面遷移や画像表示、フォルダにおけるファイルの変更等)がある場合はこちらの方法で指定することができます。

このActivityを使うことで、動作が失敗することが多い箇所においても、失敗した際に再試行することができるので安定化につながります。

 

いかがでしたか?
少しでもみなさまのRPAが安定化すれば幸いです。

 

RPAツールUiPathの安定化を行った話 “①” ということで、”②” もあります。
内容は、エラーハンドリングの予定です!
別のメンバーにお願いしているので、たのしみにしていてくださいね。

以上、やまさきあでした(^^)/