0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

BizRobo! DAで処理が空振ってしまう原因と対策(アプリ選択編)

Posted at

はじめに

私の知る限りBizRobo!以外のRPAツールはPCなど端末側にロボットが配布され、直接その端末で動作します。
起動する時点で端末が固定されているので、ロボットの命令中に「どの端末で実行する操作か」という情報は含みません。

一方のBizRobo!はサーバでロボットが起動して必要に応じて端末を操作する仕組みなので、端末処理を記録するときには

  1. どの端末で(デバイス)
  2. なんのソフトの(アプリケーション)
  3. どの場所を(コンポーネント)

操作するのか指定します。

といっても人が手動で値を「設定」する必要はなく、レコーダービューで画面イメージを操作することによりDAが自動的に操作を記録します。人は後からその結果を調整してあげる程度ですが、まぁ、その調整に手こずることもありますね。

今回は「端末で同じソフト(以降アプリケーション)が複数起動している場合に、どうやってそれを判別するの?」という素朴な疑問について記述してみたいと思います。

実際には経験ないですが、BizRobo!の場合1つのロボットで複数の端末を操作することができます。
一つのロボットが複数の端末A~Cに対して順番に処理を回してしていくようなこともできるかもしれないですね。
例えば無理やりですが、A端末でデータ入力・申請し、B端末で申請内容承認し、C端末で決済・印刷するまでを一気通貫で行うとか。。。
自己承認はだめですね。😱

アプリケーションの指定方法

DAエディターには以下の通り端末で起動されているアプリケーションがタブ形式で表示されます。
例えば特定のアプリケーションをフォーカスし画面を前面表示させたい場合、以下のようにタブでアプリケーションを指定して「フォーカス」をメニューから選びます。
image.png
するとDAがその命令を受け取って以下のように処理ステップを自動的に生成してくれます。
image.png
アプリケーションとして指定された値(firefox.exe)はプロセス名と同一です。
image.png

DAが値をセットしてくれるので何も難しいことはないのですが、それゆえ以下一度ハマると抜け出しにくかったりします。

同じプロセス名のアプリが複数起動しているとき①

以下の場合、どちらもアプリケーションは「firefox.exe」であり前述の設定ではどちらのブラウザを操作すべきか判別できません。
image.png
このような場合には以下のようにプロセス名に続けて属性を設定することによりユニークにします。
それにより処理対象の画面が一意となりロボットも迷わず操作を継続できます。
image.png
属性としてどんな値がよさそうかは Widget Tree から判断しましょう。
image.png

ちなみに手っ取り早く属性を設定する方法としては、あらかじめ複数アプリを開いた状態で「アプリケーションの指定」操作をすることです。
ロボットに操作を記録させる時点で複数のアプリが開いている場合、DAは自動的にアプリのタイトル情報を属性値として設定します。

同じプロセス名のアプリが複数起動しているとき②

では、次のようにどちらも同じタイトル情報を持っている場合はどうでしょうか?
image.png
Widget Tree を見比べてみると processId 以外はすべて同じ値で見分けがつきません。とはいえ processId は起動の都度変更される値なので識別子としても使えません。
image.png
こういった場合DAはどうやってアプリケーションを判別するのか、試しにレコーダービューから操作してみたところ :nth-of-type(1) というセレクタが追加されました。
image.png
これは CSSセレクタ による記法で、X:nth-of-type(N) という表示は XのN番目の子要素を意味します。

notepad.exe[title="*無題 - メモ帳"]:nth-of-type(1)

は、1番目に開いている「*無題 - メモ帳」というタイトルのメモ帳 という意味になります。
なので2番目(起動順)に開いたメモ帳を指定したいときには :nth-of-type(2) となるわけですね。

パターン②の場合には基本的には起動順でアプリケーションを判定する必要がありますが、仮に起動の順番が実行時の状況やタイミングにより特定できない場合、両方を順番に選択してコンポーネント内の値(今回の場合であれば「1個目」「2個目」)を読み取ることでしかどちらのアプリケーションが正しいのか判断できないのかなと思っています。

ちなみに、コンポーネント評価の前提条件としてアプリケーションが特定されている必要があります。ゆえに以下のようなアプリケーション自体が一意になっていない状況下ではコンポーネントの評価は行われず、Location Foundも空振ってしまいます。

image.png

まとめ

特段知っていなくても何となくロボットを触っていると気づいたりしますが、気づくまでの探索の時間を省略するために書いてみました。


関連記事はこちら

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?