【第90回】ロータス博士のWinActor塾~色判定Ⅲ
よし、それでは今回は解答編ということで
実際にシナリオの例を見ながら解説していくぞ。
抜き打ちテストみたいなことやらないんですね。
(助かった・・・)
ん?そうじゃのう。
それもいいかも知れんな。テスト形式のほうがよかったかのう?
いえ結構です!早く進めましょう!
そ、そうか?
では早速、解答例の全体像から見ていこう。
練習問題 色判定でサーバの稼働状況を確認する
前回記事で出題した内容がこちらです。
解答例を見る前に、仕様を再度確認しておきましょう。
シナリオ仕様
・図Aのサーバ一覧で、状態が「異常」「停止」の場合にポップアップで通知する。
その際、異常なのか停止なのかをわかるようにする。
・図Aの場合でも、図Bの場合でもシナリオが正常に動作するように作成する。
(サーバ台数が変化しても対応できるシナリオにする)
図A
図B
(参考)状態インジケータのパターン
事前準備とシナリオ全体像
事前準備
今回の例では、疑似的なシステム画面をマッチング対象としています。
画面の代用として画像ファイルを使用していますが、フォト等のアプリケーションで開いてしまうと
画像が中央揃えとなってしまい座標が変化してしまうので、次のようにExcelファイルのA1に貼り付けて使用しています。
本来であれば、マッチング対象のアプリケーションウィンドウを直接操作するので問題ありませんが
今回は画像で代用しているためこのような準備を行っています。
この例ではExcelを使用していますが、必ずしもExcelである必要はなく、ペイント等で開いても構いません。
シナリオ全体像
変数一覧
シナリオ詳細
全体像と使用される変数を確認したところで、シナリオの開始から流れに沿って処理を見ていきましょう。
準備部分
まずは、色判定を行うターゲットとなる画面を出します。
今回は画面の代用となる画像を貼ったExcelファイルを使用します。
例題には図Aと図Bがありますが、図Aを貼ったExcelファイル名を「パターンA.xlsx」
図Bを貼ったExcelファイル名を「パターンB.xlsx」としています。
変数「チェック対象画面(ファイルパス)」に初期値として入っているファイルを開き、ウィンドウの表示変更で最大化しています。
実際に図を貼ったExcel画面は次のようになっています。
繰り返しの設定
今回はサーバ数(チェックの回数)を可変にするために、繰り返し処理で色判定を実行します。
繰り返しの回数については、無限ループでチェック対象が無くなるまで行う方法と
変数に回数を保持して、適宜初期値を変更して行う方法があります。
この例では後者の初期値を入れて実行する形にしています。
初期値でループ回数を指定するため、繰り返しには条件判定を用いず
回数に変数「チェック回数(最大)」を設定しています。この変数には初期値として3が入っています。
繰り返しの処理
それでは繰り返しの処理の中を見ていきましょう。
まずは、色判定の対象となる位置を計算で求めます。この計算にも様々な方法がありますが
今回は他のシナリオでも応用できる、ループ回数を使用した方法を紹介します。
では計算について詳しく解説します。
そもそも初回の判定位置がどこなのかを調べてみましょう。次の図を見てください。
繰り返し1回目の判定対象となるAサーバのインジケータの位置はx:374,y:282となっていました。
さらにここから2回目の判定対象であるBサーバのインジケータの位置を調べます。
横の位置はどのインジケータも同じなので、x座標に変化がないことがわかります。
y座標だけをずらしていけば判定が取れそうですね。次のインジケータまでの距離は次のようになります。
1回目で調べるy座標の位置が282pxでしたので、52pxを足せば次に調べるべきy座標が求められます。
従って、2回目の色判定の位置はx:374,y:334ということになります。
これを表にまとめると
このようになります。
これを見ると、毎回行うべき計算はy座標を+52pxしていくだけということがわかります。
このままシナリオにこの計算を組み込んでも良いのですが、せっかくなので今回は違った方法で計算してみましょう。
この方法でも間違いではないぞ。
次に紹介する計算方法は、チェック開始位置に縛られないやり方じゃ。
チェック開始位置ってどういうことですか?
毎回+52するだけの計算では、3回目だけの結果が欲しいといったときに対応できないのじゃ。
必ず1ループ目から足しこんでいく必要があるからのう。
じゃがそれを可能にする方法があるのじゃ。それがこのやり方じゃ。
繰り返し1回目、2回目を飛ばしていきなり3回目の結果が欲しいといったときにでも対応するためには
計算式に繰り返し回数を入れることで実現できます。これをうまく行うコツは、繰り返し回数を0開始で考えることです。
次の図を見てください。
繰り返しを0回目から開始と考えると、y座標をずらす量は繰り返し回数との掛け算で求められます。
初期位置が282pxなので、これは毎回足してあげる必要があることに注意しましょう。式は次のようになります。
Y座標 = 52 * 繰り返し回数 + 282
このように計算することで、例えば3回目の結果が欲しいといった場合でもすぐに位置が求められます。
ちなみにこの式に出てくる「Y座標」「52」「繰り返し回数」「282」の数値はそれぞれ変数として用意してあります。
式を変数名に直すと
取得座標(Y) = Y座標ズレ幅 * チェック回数(現在) + 取得座標(Yオフセット)
となります。
これを四則演算ノードで2回に分けて計算しています。シナリオを見てみましょう。
今回の仕様は必ず上から順にチェックしていくため、このような計算はしなくてもよい。
しかしこの方法は様々なシナリオに応用できるため、できれば覚えて欲しいのじゃ。
へえー。0回目開始にして掛け算かあ。
これは目からウロコかも。
さて、ここまで計算できましたが、このままでは色判定に使用できません。
色判定で位置を指定するには
X座標,Y座標
という形式にする必要があります。計算結果をもう一工夫しましょう。
こういったときには文字列結合が便利です。
単純に取得座標(X)と取得座標(Y)の間にカンマを入れて結合します。
取得座標(X)には初期値として374が入っており、この値は繰り返し回数によって変化しません。
そのため計算不要でそのまま結合できます。
連結した結果は変数「取得座標」に格納されます。
繰り返し初回時の連結結果は374,282となります。
これで色判定を行う準備が完了しました。
それでは色判定の設定を見てみましょう。
ウィンドウ識別名に設定しているのは準備部分で開いたExcel画面です。このウィンドウ識別名はルールを多少変更しています。
今回はサーバ台数が異なる図Bもあるため、Excelファイルも「パターンA.xlsx」「パターンB.xlsx」の2つに分けています。
この名前に違いによるウィンドウタイトルの変化に対応するため「パターン」から始まるExcelウィンドウを拾うように設定しています。
位置にはy座標の計算後にx座標と結合した結果の「取得座標」を
色には結果格納用として準備した変数「取得色」をそれぞれ設定しましょう。
その他はデフォルトのままで問題ありません。
色判定ができたら判定部分を作成します。
これは単純に取得した色コードで処理を分けるため、多分岐ノードを使いましょう。
停止(暗い赤)のインジケータ色は「d60000」
異常(赤)のインジケータ色は「ff0000」です。
上図のように条件式を設定し、色によって処理が分かれるようにします。
待機ボックスにはそれぞれ「停止しました」「異常があります」などのメッセージが表示されるように設定しましょう。
繰り返しの最後には忘れずにループ回数を加算しましょう。
繰り返しノードのカウンタに変数を設定すると自動的に加算されますが、その機能を使うと回数は1からの開始となってしまいます。
今回は繰り返し回数を0からにしたいので、カウンタは使用しません。
そのため最後にしっかりと自分でカウントを+1してあげる必要があります。
ここで変数「チェック回数(現在)」を+1しています。
後処理
繰り返し処理が終わったら、メインの処理は終了です。
残りは後片付けだけですので、開いたExcelファイルを閉じて終了しましょう。
実行結果
実行結果を見てみましょう。
まずは図A(サーバ台数が3)の場合です。
画面はこちらです。
実行結果は次のように、2回ポップアップが表示されました。
わかりやすいように、検出時のループ回数を表示しています。
0番目(Aサーバ)が「停止」、2番目(Cサーバ)が「異常」と表示されています。
しっかりと動作していますね。
では別パターンの図B(サーバ台数が4)のときも見てみましょう。
画面はこちらです。
これは実行前に全体のチェック回数と、開くファイルを変更する必要があります。
次の変数一覧の赤枠部分を変更しています。
変更するのは変数の初期値のみで、シナリオには一切変更を行いません。
実行結果は次のようになります。
画面と見比べてみてどうでしょうか。
しっかりと判定できていますね。
みなさんのシナリオはどうでしたか?
今回の問題のポイントは、y座標の計算と、x座標との結合です。
この2つを抑えれば色判定は問題なく実装できるでしょう。
実行結果が上記のようになっていれば成功です。
シナリオダウンロード
今回の解答例シナリオはこちらからDL可能です。
※ファイルの解凍には会員用パスワードが必要となります。会員登録はこちらから。
ロータス君のシナリオはなぜかうまく判定できんかったのう。
あ、言っちゃいましたね。僕のイメージダウンになるじゃないですか。
僕のシナリオは色コードがちょっと間違ってたみたいです。
色コードはWinActorの色判定で実際に取った値を使うのが良いぞ。
他のツール等で取ったコードと完全に一致するという保証はないのでな。
罠か・・・。
いや、罠ではないが。
次回はまた新しいものに挑戦してみようかのう!
それでは今回はこれにて解散!
関連記事こちらの記事も合わせてどうぞ。
2024.11.05
【第105回】ロータス博士のWinActor塾~新しい画像マッチング画面
2024.09.27
【第104回】ロータス博士のWinActor塾~ガイド利用シナリオ(作成編)
2024.09.10