制御フロー
Selenium IDEには、テストに条件分岐とループを追加できるコマンドが用意されています。
これにより、アプリケーション内の特定の条件が満たされた場合にのみコマンド(またはコマンドセット)を実行したり、事前に定義された基準に基づいてコマンドを繰り返し実行したりできます。
JavaScript式
アプリケーション内の条件は、JavaScript式を使用してチェックされます。
execute script
コマンドまたはexecute async script
コマンドを使用して、テスト中の任意の時点でJavaScriptのスニペットを実行し、その結果を変数に格納できます。これらの変数は、制御フローコマンドで使用できます。
制御フローコマンドでJavaScript式を直接使用することもできます。
使用可能なコマンド
制御フローコマンドは、コマンドのセット(またはブロック)を示す開始コマンドと終了コマンドを指定して機能します。
使用可能な制御フローコマンドとその対応する終了コマンドを以下に示します。
if
、else if
、else
、end
times
、end
do
、repeat if
while
、end
それぞれの例を見ていきましょう。
条件分岐
条件分岐を使用すると、テストの動作を変更できます。
if
これは、条件ブロックの開始コマンドです。
これと共に、評価したいJavaScript式を指定します。これは、テストの以前のJavaScript式から作成された変数で構成される場合があります。これらはすべて、if
コマンドのtarget
入力フィールドに入力されます。
式がtrue
と評価された場合、テストはそれに続くコマンドを次の条件付き制御フローコマンド(例:else if
、else
、またはend
)まで実行します。
式がfalse
と評価された場合、それに続くコマンドをスキップし、次の関連する条件付き制御フローコマンド(例:else if
、else
、またはend
)にジャンプします。
else if
このコマンドは、if
コマンドブロック内で使用されます。
if
と同様に、target
入力フィールドに評価するJavaScript式を入力し、それに続くコマンドブランチを実行するか、次の関連する制御フローコマンド(例:else
またはend
)にスキップします。
else
else
は、if
ブロックに含めることができる最後の条件です。前の条件がどれも満たされていない場合、このコマンドブランチが実行されます。
完了すると、end
コマンドにジャンプします。
end
このコマンドは、条件コマンドブロックを終了します。これがないと、コマンドブロックは不完全になり、テストの実行時に役立つエラーメッセージが表示されます。
ループ
ループを使用すると、指定されたコマンドセットを反復処理できます。
times
times
を使用すると、コマンドセットを実行する反復回数を指定できます。数値は、times
コマンドのtarget
入力フィールドに入力します。
times
コマンドブロックを閉じるには、end
コマンドを使用してください。
do
このループはdo
コマンドで開始し、実行するコマンドが続き、repeat if
コマンドで終了します。repeat if
は、target
入力フィールドに評価するJavaScript式を入力します。
do
の後のコマンドが最初に実行され、次にrepeat if
の式が評価されます。式がtrue
を返す場合、テストはdo
コマンドに戻り、シーケンスを繰り返します。
これは、条件がfalse
を返すか、無限ループ保護がトリガーされるまで続きます。無限ループ保護はデフォルトで1000
回です。これは、repeat if
コマンドのvalue
入力フィールドに数値を指定することで上書きできます。
while
while
では、target
入力フィールドに評価するJavaScript式を入力します。true
と評価された場合、それに続くコマンドブロックはend
コマンドに到達するまで実行されます。
完了すると、テストはwhile
コマンドに戻り、同じシーケンスを繰り返します(最初に条件がtrue
またはfalse
と評価されるかどうかを確認します)。
while
コマンドブロックを閉じるには、end
コマンドを使用します。
ループは、条件がfalse
を返すか、無限ループ防止機能がトリガーされるまで再試行されます。無限ループ防止機能はデフォルトで1000
回の試行に設定されています。while
コマンドのvalue
入力フィールドに数値を指定することで、このデフォルト値を上書きできます。
forEach
最後に、コレクション(例:JS配列)を反復処理し、そのコレクションの各項目を参照する機能について説明します。
target
フィールドには、反復処理する配列を含む変数の名前を指定します。value
フィールドには、使用する反復変数の名前を指定します。配列の各エントリに対して、その後のコマンドが実行されます。各反復処理において、現在のエントリのコンテンツは反復変数を通じてアクセスできます。
コマンドのネスト
必要に応じて制御フローコマンドをネストできます(例:if
ブロックをwhile
ブロック内に配置したり、その逆も可能です)。
構文検証
制御フローの構文が正しいかどうかわからない場合は、テストを実行してみてください。IDEは制御フロー構文のエラーを検出し、不適切なコマンドや欠落しているコマンドを特定します。