【第90回】ロータス博士のWinActor塾~色判定Ⅲ
![](https://www.knet-bpr.com/img/DrRoTAS.png)
よし、それでは今回は解答編ということで
実際にシナリオの例を見ながら解説していくぞ。
![](https://www.knet-bpr.com/img/MrRoTAS.png)
抜き打ちテストみたいなことやらないんですね。
(助かった・・・)
![](https://www.knet-bpr.com/img/DrRoTAS.png)
ん?そうじゃのう。
それもいいかも知れんな。テスト形式のほうがよかったかのう?
![](https://www.knet-bpr.com/img/RoTAS_yoko.png)
いえ結構です!早く進めましょう!
![](https://www.knet-bpr.com/img/DrRoTAS.png)
そ、そうか?
では早速、解答例の全体像から見ていこう。
練習問題 色判定でサーバの稼働状況を確認する
前回記事で出題した内容がこちらです。
解答例を見る前に、仕様を再度確認しておきましょう。
シナリオ仕様
・図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していくだけということがわかります。
このままシナリオにこの計算を組み込んでも良いのですが、せっかくなので今回は違った方法で計算してみましょう。
![](https://www.knet-bpr.com/img/DrRoTAS.png)
この方法でも間違いではないぞ。
次に紹介する計算方法は、チェック開始位置に縛られないやり方じゃ。
![](https://www.knet-bpr.com/img/MrRoTAS.png)
チェック開始位置ってどういうことですか?
![](https://www.knet-bpr.com/img/DrRoTAS.png)
毎回+52するだけの計算では、3回目だけの結果が欲しいといったときに対応できないのじゃ。
必ず1ループ目から足しこんでいく必要があるからのう。
じゃがそれを可能にする方法があるのじゃ。それがこのやり方じゃ。
繰り返し1回目、2回目を飛ばしていきなり3回目の結果が欲しいといったときにでも対応するためには
計算式に繰り返し回数を入れることで実現できます。これをうまく行うコツは、繰り返し回数を0開始で考えることです。
次の図を見てください。
繰り返しを0回目から開始と考えると、y座標をずらす量は繰り返し回数との掛け算で求められます。
初期位置が282pxなので、これは毎回足してあげる必要があることに注意しましょう。式は次のようになります。
Y座標 = 52 * 繰り返し回数 + 282
このように計算することで、例えば3回目の結果が欲しいといった場合でもすぐに位置が求められます。
ちなみにこの式に出てくる「Y座標」「52」「繰り返し回数」「282」の数値はそれぞれ変数として用意してあります。
式を変数名に直すと
取得座標(Y) = Y座標ズレ幅 * チェック回数(現在) + 取得座標(Yオフセット)
となります。
これを四則演算ノードで2回に分けて計算しています。シナリオを見てみましょう。
![](https://www.knet-bpr.com/img/DrRoTAS.png)
今回の仕様は必ず上から順にチェックしていくため、このような計算はしなくてもよい。
しかしこの方法は様々なシナリオに応用できるため、できれば覚えて欲しいのじゃ。
![](https://www.knet-bpr.com/img/RoTAS_yoko.png)
へえー。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可能です。
※ファイルの解凍には会員用パスワードが必要となります。会員登録はこちらから。
![](https://www.knet-bpr.com/img/DrRoTAS.png)
ロータス君のシナリオはなぜかうまく判定できんかったのう。
![](https://www.knet-bpr.com/img/MrRoTAS.png)
あ、言っちゃいましたね。僕のイメージダウンになるじゃないですか。
僕のシナリオは色コードがちょっと間違ってたみたいです。
![](https://www.knet-bpr.com/img/DrRoTAS.png)
色コードはWinActorの色判定で実際に取った値を使うのが良いぞ。
他のツール等で取ったコードと完全に一致するという保証はないのでな。
![](https://www.knet-bpr.com/img/MrRoTAS.png)
罠か・・・。
![](https://www.knet-bpr.com/img/DrRoTAS.png)
いや、罠ではないが。
次回はまた新しいものに挑戦してみようかのう!
それでは今回はこれにて解散!
関連記事こちらの記事も合わせてどうぞ。
2024.05.24
【第102回】ロータス博士のWinActor塾~リトライできるシナリオⅡおまけ
2024.04.22
【第101回】ロータス博士のWinActor塾~リトライできるシナリオⅡ
2024.03.27