TL;DR
- 複数のアクティビティを内部に含め、並列で実行する
-
Conditionの設定によって、全体の挙動を変更することが出来る-
Condition = Trueならば、含められたアクティビティのうちひとつでも完了すれば次のアクティビティに遷移する -
Condition = Falseならば、含められたアクティビティのすべてが完了した後に次のアクティビティに遷移する
-
使いドコロ例
ログイン済か否かの判定
- Webブラウザで任意のサービスにアクセスするとき、セッションが残っていてログインを求められない場合がある
- しかしながら一定時間が経つと自動でログアウトされ、再度ログイン処理を行わなければならない、というケース
実装
-
Element Existsアクティビティを2つ用意する。対象となる要素は下記にする- a) ログイン前の画面であることを特定できる要素
- ユーザーIDやパスワードの入力フォームなど
- b) ログイン後の画面であることを特定できる要素
- ログイン後にのみ表示されるユーザー名欄やフォームなど
- a) ログイン前の画面であることを特定できる要素
- 1.で用意したアクティビティのうちいずれかに対して、
Outputを定義する- 両方に設定してもよい
- Outputで定義した変数のDefault Valueが
falseであることが条件
- 1.で用意したアクティビティを
Parallelアクティビティに含める - プロパティ画面から
Condition = Trueに設定する -
Parallel以降で、ログイン前/ログイン後での処理分岐を実装する- この分岐判断に、2.で設定したOutputを利用する
補足
2.において「いずれか」の実装で良いのは、それぞれのパターンで次のように挙動するため。
- 例として、次のような実装を考える
- 実装1.b)に対して、Outputとして
alreadyLoggedInを定義する
- 実装1.b)に対して、Outputとして
ログイン前の場合
- ログイン前の画面が表示される
- アクティビティa)が要素を発見する。これによりアクティビティa)が完了する
-
Parallelの設定により、この時点で次のアクティビティへの遷移が確定する - 遷移の時点でアクティビティb)は完了していないので、
alreadyLoggedIn = Falseと判定される
ログイン後の場合
- ログイン後の画面が表示される
- アクティビティb)が要素を発見する。これによりアクティビティb)が完了する。要素を発見したので、
alreadyLoggedIn = Trueとなる -
Parallelの設定により、この時点で次のアクティビティへの遷移が確定する - 遷移の時点でアクティビティa)は完了していないが、
Outputを定義していないので、処理には影響を及ぼさない
その他の使いドコロ
あったら追記します。