【第101回】ロータス博士の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/MrRoTAS.png)
あれ、僕ディスられてる?
まあいいや早くいきましょう!
シナリオプリーズ!
![](https://www.knet-bpr.com/img/DrRoTAS_ase.png)
そのメンタルの強さは見習いたいところじゃな。
よし、では作っていこう!
前回の記事はこちら
![記事サムネイル](https://www.knet-bpr.com/img/blog_713.png)
今回作成するシナリオで使用するテストページは以下のリンクから確認できます。
ログインシナリオの作成(リトライなし)
まずはリトライを考えず、単純なログイン操作を行うシナリオを作成しましょう。
一旦最後まで作り、そこからリトライのループを取り入れていきます。
シナリオ全体図
これがリトライを考慮しない、一度のみ実行されるシナリオです。
変数一覧
ここまでで必要になる情報を変数にすると以下のようになります。
そのままプロパティに入力しても構いませんが、変数にしたほうが後からの変更が楽になります。
変数「ブラウザ」はブラウザ起動時に指定するブラウザ名です。名前は好みで付けてください。
サンプルではmainとしています。
「ログインページURL」は前回指定している「https://www.knet-bpr.com/column/winactor-lectureship/20240327-2.html」を初期値にしてください。「ユーザ名」と「パスワード」も好きな文字列で問題ありません。
![](https://www.knet-bpr.com/img/DrRoTAS.png)
では一旦これを作ってしまおう。
ブラウザ起動
ブラウザを起動する部分は、コマンド実行でブラウザを立ち上げたりとやり方は様々です。
今回はブラウザ関連のライブラリである「ブラウザ起動」を使用します。
画像マッチングで動かす際も、起動はこちらを使うことができます。
ただし、WebDriverを使用しますのでブラウザとドライバのバージョンにご注意ください。
プロパティはそれぞれ次のように設定します。
「ウィンドウの表示変更」の部分で、ウィンドウ識別名が必要になります。
一度シナリオを動かして起動してきたブラウザからウィンドウ識別名を取得しましょう。
ユーザ名を入力
ブラウザを起動し目的のページが表示できたら、早速ユーザ名を入力していきます。
今回は画像マッチングを使用して入力欄をアクティブにします。設定は下図の通りです。
アクションを「左ボタンクリック」に変更することを忘れずに。
このアクションによって入力欄にカーソルが移動します。
その後はあらかじめ変数に用意したユーザ名をクリップボードにコピーして
エミュレーションで貼り付け操作を行います。
パスワードを入力
パスワードの入力もユーザ名の入力と同じ動きの流れで実装できます。
入力する位置と貼り付ける文字が変わるだけですね。
ユーザ名を入力する部分のグループをコピーして、一部修正すると効率的です。
画像マッチングは、パスワードのほうを判定するように変更します。
クリップボードも変更し、パスワードを格納しておきます。
貼り付け操作はそのまま流用できます。
ログインをクリック
ここまでで入力は全て完了しました。あとはログインするだけですね。
シンプルに画像マッチングでログインボタンを押しましょう。
実行結果
ここまで作成できたら実行してみましょう!
前回の説明通り、必ず失敗します。ログインボタンの下にあるメッセージが失敗となっていればOKです。
ログインシナリオの作成(リトライの追加)
![](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)
難しく考える必要はないぞ。
自分でログインするとき、失敗したらどうする?
![](https://www.knet-bpr.com/img/MrRoTAS.png)
ユーザ名とパスワードを入れなおして、ログインですかね。
あ、そうか。それでいいのか!
![](https://www.knet-bpr.com/img/DrRoTAS.png)
そうじゃ!
ここまで作ったシナリオ図でいうと、ユーザ名入力から下全部じゃな。
リトライのためのループ追加
リトライの範囲が定まったようですね。それではフローに反映しましょう。
ユーザ名を入力、パスワードを入力、ログインをクリックの3つのグループを全て繰り返しノードに入れます。
プロパティは次のように、ループ回数を指定しましょう。
今回のサンプルでは回数を5にしてみます。
このループはまだループを抜けるための処理を入れていませんので、
こうして回数を入れておくと無限ループに陥ることがなくなり安心です。
ループを終了するように作成しても、それが機能しなかった場合に無限ループになってしまいます。
そういった予期せず無限ループになってしまうということも、回数を指定することで防止できます。
![](https://www.knet-bpr.com/img/DrRoTAS.png)
回数の決まっていないループでも、回数を設定することをおすすめしておるぞ。
それが最大リトライ回数(失敗した際のリトライを何度までチャレンジするか)となるのじゃ。
ループを抜ける処理の追加
さらにこのフローに、ループを抜ける処理を追加しましょう。
このシナリオでループを抜けるということはリトライが不要になった場合ということです。
となるとループを抜ける条件は「ログインに成功した場合」ということになりますね。
なにをもってログイン成功とみなすか、は重要なポイントです。
今回利用しているテストページではログイン成功の文字列が出ますので、それが出たらOKとしましょう。
ここも画像マッチングで判定します。
成功の画像をキャプチャするために手動で「ログイン」ボタンを何度か押して、成功メッセージを表示してください。
![](https://www.knet-bpr.com/img/MrRoTAS.png)
なんでこれ何回か押したら成功するんですか?
![](https://www.knet-bpr.com/img/DrRoTAS.png)
そりゃテストのためにワシが適当に作ったからじゃよ!
普通のシステムではありえないが、今回限りの仕様じゃ。
それではフローに画像マッチングを追加します。
ログインボタンを押してから成功したかどうかをチェックするため、ループの最後の位置になります。
プロパティは次のようになります。
先ほど手動で成功させたログイン結果の文字を判定します。
アクションは「状態チェック」です。
状態チェックではチェックの結果を格納する変数が必要になりますので、
新たに「画像マッチング結果」という変数を作成しそれを設定しています。
この「画像マッチング結果」に格納された結果をもとに、ループを抜けるかの分岐を行いましょう。
まずは分岐をフローに配置し
分岐ノードのプロパティで次のように条件を設定します。
これでマッチングが成功した場合、つまりログイン成功のときにTrue側のフローに進むようになります。
あとはTrue側にループを抜けるためのノード「繰り返し終了」を入れれば完了です。
実行結果
それではリトライが動くか確認してみましょう。
画像マッチングの設定でタイムアウトを10秒のままにしているので、ログイン失敗時に少し止まります。
10秒は様子を見るようにして確認してください。
実行後このようになっていれば一旦完了です。
ログインシナリオの作成(修正)
![](https://www.knet-bpr.com/img/MrRoTAS.png)
ログイン成功ですね!やった!
これで完成!お疲れさまでs
![](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)
実行結果を見たらおかしいところがあるじゃろ?
![](https://www.knet-bpr.com/img/RoTAS_yoko.png)
いや・・・一旦無い・・・か。
無いですね。だって成功してるし。
![](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/DrRoTAS_ase.png)
ガバガバて・・・そんなこと言われても。
リトライ時にユーザ名とパスワードが変わってしまってはリトライの意味がありません。
入力を少し工夫して、初回もループ時もきれいに入力できるように修正しましょう。
まずはユーザ名の入力から修正します。
ここで問題なのは、貼り付けのみを行っていることです。
初回は入力欄になにもないので正しい文字列が入力されますが、二回目以降は既に入力した文字列が残っているため
重ねて入力されてしまうのです。
これを回避するために、貼り付ける前に入力欄をきれいにする処理を挟みましょう。
処理はとても単純で、カーソルを入力欄に移動したあとにショートカットキーを使います。
「Ctrl + A」で文字を全選択→「Delete」で選択された文字を削除です。
この操作であれば、初回に実行しても問題ないですね。空の入力欄を全選択して削除しても空です。
二回目以降は文字が消せるので、初回と二回目以降で処理を変える必要もありません。
それではフローに反映します。
入力欄を選択した直後に削除するため、位置は画像マッチングの直後、プロパティは図の通りとなります。
パスワードの入力も同様に修正します。
操作は全く同じなので、先ほど追加したノードをそのままコピー&ペーストして問題ありません。
実行結果
それでは実行して結果を確認しましょう。
ログイン成功となっており、入力欄もおかしくないですね。
実際に動いているところを見ると、しっかり3回目で終了しています。
シナリオ全体図(修正後)
最後に修正したシナリオ全体図です。
必ずしも同じように作成する必要はありませんが、自身のシナリオと見比べて参考にしてみてください。
シナリオダウンロード
今回作成したシナリオはこちらからDL可能です。
※ファイルの解凍には会員用パスワードが必要となります。会員登録はこちらから。
![](https://www.knet-bpr.com/img/MrRoTAS.png)
なんか今日は疲れましたね・・・
でもおかげできれいなリトライ処理が作れた気がします。
![](https://www.knet-bpr.com/img/DrRoTAS.png)
結構ガッツリやってしまったのう!
リトライはシナリオの安定稼働には重要じゃからな。
今回の例はかなり簡単じゃが、いろいろと応用してみてほしい。
![](https://www.knet-bpr.com/img/MrRoTAS.png)
そうですね。今度からはリトライも考えて作るようにします。
じゃあ今度こそお疲れさまでした!
![](https://www.knet-bpr.com/img/DrRoTAS.png)
なんだかんだしっかりやっておったから良しとしよう。
それでは皆さんまた次回!
関連記事こちらの記事も合わせてどうぞ。
2024.05.24
【第102回】ロータス博士のWinActor塾~リトライできるシナリオⅡおまけ
2024.03.27
【第100回】ロータス博士のWinActor塾~リトライできるシナリオⅠ
2024.01.05