IF、Else、End IF、Exists in QTP/UFT 例を挙げて

⚡ スマートサマリー

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

  • 🔀 基本的な構文: If…Then は、オプションの Else ブロックと組み合わされ、End If で閉じられ、評価ごとに正確に 1 つの分岐が実行されます。
  • 🧮 複数の条件: ElseIf は条件を上から順にチェックし、最初に True に一致した時点で停止し、個別の If ブロックの長い連鎖を置き換えます。
  • 🪆 入れ子構造のロジック: 別のThenまたはElseセクションの中にIfセクションを配置することで、依存関係のあるチェックを処理できます。読みやすさを考慮して、ネストは2~3レベルに抑えてください。
  • 🎯 ケースを選択: 1つの変数を複数の固定値と比較し、長いElseIfの連鎖よりも読みやすい。
  • 🔍 既存のプロパティ: オブジェクトが画面上にあるかどうか、つまりIf Else分岐の標準条件に対してTrueまたはFalseを返します。
  • 🧪 応用例: If ElseとExistを組み合わせることで、スクリプトを自動的にフライト予約のログインパス(否定または肯定)に振り分けることができます。
  • 🤖 AI支援: AIツールは、デバッグ中にIf ElseブロックとSelect Caseブロックを作成し、不足しているEnd Ifステートメントを指摘することができます。

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 と組み合わせるのに最適な条件となります。以下の例では、従来のログイン機能のシナリオを再検討します。 フライト予約 からのアプリケーション テスト エラーダイアログが表示された場合はスクリプトがネガティブシナリオパスに分岐し、表示されなかった場合にはポジティブシナリオパスに分岐するシリーズ。これは、 テストシナリオ 上記の動画で解説されています。

  1. 有効なエージェント名とパスワードの組み合わせでログインするスクリプトと、無効な組み合わせでログインするスクリプトの2つを別々に記録してください。
  2. ログイン手順の直後にIf Else手順を挿入することで、両方の記録を1つの結合スクリプト内で実行できます。
  3. エラー情報ウィンドウが存在するかどうかを確認する条件を設定します。 存在する クリックステップの代わりにプロパティを使用します。
  4. エラーウィンドウやログインダイアログを閉じるなどのネガティブシナリオの手順をIfブロックの中に移動します。
  5. フライト予約ウィンドウを閉じるなどの、肯定的なシナリオの手順をElseブロック内に移動してください。
  6. 結合したスクリプトを保存し、有効な認証情報と無効な認証情報の両方に対して実行して、各パスが正しく実行されることを確認してください。
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を返すように設定できます。これは読み込みの遅いダイアログには有効ですが、すべてのステップで使用するとスイート全体の処理速度が低下する可能性があります。長い待機時間は、本当に処理の遅いオブジェクトに限定してください。適切な短いタイムアウトを設定することで、肯定シナリオと否定シナリオを組み合わせたスクリプトを、連続テスト実行時でも信頼性が高く、かつ高速に実行できます。

よくあるご質問

ElseIfは条件を順番に評価し、最初に一致した時点で停止するため、複数の独立したIfブロックよりも高速で分かりやすくなります。条件が互いに関連しておらず、かつすべての条件をチェックする必要がある場合にのみ、個別のIf文を使用してください。

Existは UFT デフォルトの同期タイムアウトは通常数秒ですが、読み込みの遅いオブジェクトをより長く待つために、括弧内に Exist(10) などのカスタム値が渡されます。

はい。AIアシスタントは、テストロジックを平易な言葉で記述した内容に基づいて、If、ElseIf、Select Caseブロックを作成できますが、テスターはスクリプトを実行する前に、オブジェクト名、プロパティ、タイムアウト値を必ず確認する必要があります。

AIツールはスクリプトをスキャンし、不一致のEnd Ifステートメントや到達不能なElseブロックを検出して修正案を提示できるため、長いスクリプトを手動で一行ずつ確認するよりもデバッグが高速化されます。

はい。Case行内でIsキーワードを使用すると、例えばCase Is > 90のように、しきい値を超えるすべての値を個別に列挙する代わりに一致させることができます。