IF、Else、End IF、Exists in QTP/UFT 例を挙げて
⚡ スマートサマリー
IF Else End If ステートメント UFT (NAIST) と QTP スクリプトは実行時の条件に基づいて分岐しますが、Exist プロパティは、分岐が実行される前にオブジェクトが画面に表示されているかどうかをチェックし、ElseIf、ネストされた If、Select Case も対象としています。

IF Else ステートメントとは何ですか UFT/QTP?
IF Else ステートメントは、スクリプト言語である VBScript で最も一般的な条件制御構造です。 UFT/QTP 自動化スクリプト。スクリプトが実行時に判断を下せるようにします。条件が True と評価された場合は、1 つのステートメント ブロックが実行され、False と評価された場合は、別のブロックが実行されます。テスターは、ログインが成功した場合と失敗した場合、またはオブジェクトが画面に表示される場合と表示されない場合など、スクリプトを分岐させるために、この構造を常に利用します。VBScript がサポートする条件ステートメントと比較演算子の完全なリストについては、以下を参照してください。 VBScriptの条件文 ガイド。
基本形式は、If…Then ブロックとオプションの Else ブロックを組み合わせ、必ず End If で閉じます。 UFT/QTP 条件を一度評価します。条件が真の場合、ThenとElseの間のステートメントのみが実行され、偽の場合、ElseとEnd Ifの間のステートメントのみが実行され、いずれか一方の分岐のみが実行されます。以下の構文は数値をチェックし、結果に応じて異なるメッセージボックスを表示します。
Dim iValue iValue = 25 If iValue > 18 Then MsgBox "Eligible" Else MsgBox "Not Eligible" End If
In UFT/QTPほとんどの場合、条件は数値ではなく、オブジェクトのプロパティ、チェックポイントの結果、または Exist プロパティの戻り値を比較します。これは、ほとんどのスクリプトが算術演算を行うのではなく、テスト対象のアプリケーションを検証するためです。このページの下部にあるすべての例は、上記に示した If…Then…Else…End If パターンに基づいています。条件だけが異なります。どの条件を使用する場合でも、スクリプトを回帰テストスイートに移動する前に、必ず True と False の両方のパスを少なくとも 1 回はテストしてください。
IF…Then…ElseIf…Else文 UFT/QTP
単純なIf Else文では、常に2つの結果しか選択できません。スクリプトで3つ以上の相互排他的な条件をテストする必要がある場合、VBScriptでは同じブロックにElseIf文を追加します。 UFT/QTP 上から順に各条件をチェックし、条件が真となる最初のブロックを実行します。末尾のElseを含む他のすべてのブロックはスキップされます。これにより、無関係なIfブロックを複数ネストするよりも、スクリプトの可読性が格段に向上します。
- 条件は上から順に評価され、最初に真となる条件が見つかった時点で評価は終了します。
- 各 ElseIf キーワードには、それぞれ独自の Then と条件が必要です。
- 末尾のelseは省略可能で、それより上の条件のいずれにも一致しない場合にのみ実行されます。
- ブロック全体を閉じるには、含まれている ElseIf 分岐の数に関係なく、End If が 1 つだけ必要です。
Dim iMarks iMarks = 75 If iMarks >= 90 Then MsgBox "Grade A" ElseIf iMarks >= 75 Then MsgBox "Grade B" ElseIf iMarks >= 50 Then MsgBox "Grade C" Else MsgBox "Fail" End If
上記のスクリプトは、スコア範囲ごとに異なる評価を出力し、いずれかの分岐が真と評価された時点でそれ以上の条件チェックを停止します。これにより、長時間の自動化実行中でも、大規模な決定木を効率的に維持できます。
同じパターンはUIチェックにも直接適用できます。スクリプトはステータスフィールドの値を読み取り、見つかったテキストに応じて合格、警告、または失敗の処理にルーティングするためにElseIfを使用できます。これは、フィールドを個別に再評価する3つの別々のIfブロックを使用する代わりになります。
ネストされたif文 UFT/QTP
ネストされた If ブロックは、別の If ブロックの Then または Else セクション内に、完全な If…End If ブロックを配置します。 UFT/QTP まず外側の条件を解決し、その外側の分岐に入ったときにのみ内側のIfを評価します。このパターンは、ユーザーが投票できる年齢であることを確認し、性別でさらに分岐するなど、互いに依存するチェックに適しています。すべての条件をAndとOrを使った長い式にまとめるのではなく、このような処理が可能です。ネストは浅く、一般的には2~3レベルまでにしてください。ネストが増えるほどスクリプトの理解が難しくなります。 trace とデバッグ。 UFT/QTP 一般的に、ネストされた If は最初にオペレーティングシステムをチェックし、次にブラウザーまたはアプリケーションの状態に基づいて分岐するため、内側のブロックは外側のコンテキストが確認された後にのみ実行されます。
💡ヒント: ネストされたブロックはそれぞれ1レベル分インデントし、End If はそれぞれ別の行に記述してください。インデントを統一することで、スクリプトが実行時にエラーになる前に、End If の欠落を迅速に検出できます。
Dim iAge, sGender iAge = 20 sGender = "Male" If iAge >= 18 Then If sGender = "Male" Then MsgBox "Eligible male voter" Else MsgBox "Eligible female voter" End If Else MsgBox "Not eligible to vote" End If
選択ケースステートメント UFT/QTP
Select Caseは、各分岐で同じ単一の変数を異なる固定値と比較する場合に、長いElseIfチェーンの代替手段となります。 UFT/QTP Select Case 行の式を一度評価し、次に各 Case 値と順番に比較して、一致する最初のブロックを実行します。オプションの Case Else は、リストされたどのケースにも該当しない値を捕捉します。これは、If ブロックの末尾の Else と同様です。比較変数は一度しか書き込まれないため、長い Select Case ブロックは、すべての分岐で同じ変数名を繰り返す同等の ElseIf ステートメントの連鎖よりも、後で更新するのが容易です。
ケース値は等価性を使用して比較され、大文字と小文字が区別されるため、「Chrome」と「chrome」は、LCase 関数などで最初に正規化されない限り、異なる一致としてカウントされます。 VBScript変数宣言 Dimとデータ型がこれらの比較にどのように影響するかについてのガイド。
Dim sBrowserName sBrowserName = "Chrome" Select Case sBrowserName Case "Chrome" MsgBox "Launching Chrome" Case "Firefox" MsgBox "Launching Firefox" Case "Edge" MsgBox "Launching Edge" Case Else MsgBox "Browser not supported" End Select
| ステートメント | 最高の | 条件の数 | 大規模環境における読みやすさ |
|---|---|---|---|
| もし…そうでなければ | 2つの結果 | 1年の状況 | ハイ |
| もし…そうでなければもし…そうでなければ | 複数の無関係な症状 | 3つ以上の条件 | 枝が伸びるにつれて滴り落ちる |
| ケースを選択 | 1つの変数の多くの固定値 | いずれかの番号 | 高いまま |
Case は Is キーワードを使用して範囲に一致させることもできます。たとえば、Select Case ブロック内で Case Is > 90 と記述すると、しきい値を超えるすべての値を個別に列挙する代わりに、単一の Case でカバーできます。
スクリプトで1つの変数を複数の可能な値と比較する場合は、「大文字小文字の区別を選択」を選択してください。異なる変数を比較したり、範囲や論理演算子を使用したりする条件の場合は、「If…ElseIf」を使用してください。
Exist プロパティで IF Else を使用する方法 UFT
詳しくはこちら こちら ビデオにアクセスできない場合
Exist プロパティは、テスト対象のアプリケーションにオブジェクトが現在存在するかどうかに応じて True または False を返すため、If Else と組み合わせるのに最適な条件となります。以下の例では、従来のログイン機能のシナリオを再検討します。 フライト予約 からのアプリケーション テスト エラーダイアログが表示された場合はスクリプトがネガティブシナリオパスに分岐し、表示されなかった場合にはポジティブシナリオパスに分岐するシリーズ。これは、 テストシナリオ 上記の動画で解説されています。
- 有効なエージェント名とパスワードの組み合わせでログインするスクリプトと、無効な組み合わせでログインするスクリプトの2つを別々に記録してください。
- ログイン手順の直後にIf Else手順を挿入することで、両方の記録を1つの結合スクリプト内で実行できます。
- エラー情報ウィンドウが存在するかどうかを確認する条件を設定します。 存在する クリックステップの代わりにプロパティを使用します。
- エラーウィンドウやログインダイアログを閉じるなどのネガティブシナリオの手順をIfブロックの中に移動します。
- フライト予約ウィンドウを閉じるなどの、肯定的なシナリオの手順をElseブロック内に移動してください。
- 結合したスクリプトを保存し、有効な認証情報と無効な認証情報の両方に対して実行して、各パスが正しく実行されることを確認してください。
Dim bLoginFailed bLoginFailed = Browser("Flight Reservation").Page("Flight Reservation").WinObject("Error").Exist(5) If bLoginFailed Then 'Negative scenario - invalid login Browser("Flight Reservation").Page("Flight Reservation").WinObject("Error").Close Dialog("Login").Close Else 'Positive scenario - valid login Window("Flight Reservation").Close End If
If と Else の他に、VBScript は While…Wend もサポートしています。 For…Nextループ 繰り返し処理には、さらに上記で説明した ElseIf および Select Case ステートメントを使用して追加の分岐処理を行います。これらの構造を Exist プロパティと組み合わせることで、単一の UFT/QTP このスクリプトは、手動による介入なしに、肯定的なテストシナリオと否定的なテストシナリオの両方を処理します。
⚠ 注意: Exist(10) のように、Exist に長い値を渡すと、 UFT オブジェクトが読み込まれるまでより長く待機してからFalseを返すように設定できます。これは読み込みの遅いダイアログには有効ですが、すべてのステップで使用するとスイート全体の処理速度が低下する可能性があります。長い待機時間は、本当に処理の遅いオブジェクトに限定してください。適切な短いタイムアウトを設定することで、肯定シナリオと否定シナリオを組み合わせたスクリプトを、連続テスト実行時でも信頼性が高く、かつ高速に実行できます。
