如果,否则,结束如果,存在于 QTP/UFT 与例子

⚡ 智能摘要

IF Else End If 语句 UFT 和 QTP 脚本会根据运行时条件进行分支,而 Exist 属性会在分支执行之前检查对象是否出现在屏幕上,这也涵盖了 ElseIf、嵌套 If 和 Select Case。

  • 🔀 基本语法: If…Then 与可选的 Else 块配对,并以 End If 结束,每次评估只运行一个分支。
  • 🧮 多种条件: ElseIf 从上到下检查条件,并在遇到第一个 True 匹配时停止,从而取代冗长的 If 代码块。
  • 🪆 嵌套逻辑: 将 If 语句放在另一个 Then 或 Else 语句中可以处理依赖性检查;为了提高可读性,嵌套层数最好控制在两到三层。
  • 🎯 选择案例: 将一个变量与多个固定值进行比较,并且比冗长的 ElseIf 链更清晰易懂。
  • 🔍 存在属性: 返回 True 或 False 以指示对象是否在屏幕上,这是 If Else 分支的标准条件。
  • 🧪 应用实例: 将 If Else 与 Exist 结合使用,可以自动将脚本路由到否定或肯定的航班预订登录路径。
  • 🤖 人工智能辅助: AI 工具可以自动生成 If Else 和 Select Case 代码块,并在调试过程中标记缺失的 End If 语句。

什么是 IF Else 语句? UFT/QTP?

IF Else 语句是 VBScript 中最常见的条件控制结构,VBScript 是一种用于编写代码的脚本语言。 UFT/QTP 自动化脚本允许脚本在运行时做出决策:当条件为真时,执行一个语句块;当条件为假时,执行另一个语句块。测试人员经常依赖这种结构,例如,在登录成功或失败时,或者在对象可能出现在屏幕上或不出现在屏幕上时,对脚本进行分支。有关 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 两种情况。

IF…Then…ElseIf…Else 语句 UFT/QTP

普通的 If Else 语句只能在两种结果之间进行选择。当脚本需要测试三个或更多互斥条件时,VBScript 会在同一个代码块中添加 ElseIf 语句。 UFT/QTP 它会从上到下逐个检查条件,并执行第一个条件为真的代码块;其他所有代码块,包括末尾的 Else 语句,都会被跳过。这样一来,脚本的可读性远高于将多个不相关的 If 代码块嵌套在一起。

  • 条件从上到下进行评估,评估在第一个为真的条件处停止。
  • 每个 ElseIf 关键字都需要自己的 Then 语句和条件语句。
  • 最后一条 Else 语句是可选的,只有当上面的条件都不满足时才会执行。
  • 无论代码块中包含多少个 ElseIf 分支,只需一个 End If 即可关闭整个代码块。
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

上面的脚本会为每个分数范围打印不同的等级,并且一旦某个分支的评估结果为 True,就会停止检查进一步的条件,这使得大型决策树即使在长时间的自动化运行中也能保持高效。

同样的模式也直接适用于 UI 检查:脚本可以读取状态字段的值,并使用 ElseIf 根据找到的文本路由到通过、警告或失败处理,而不是使用三个单独的 If 块分别独立地重新评估该字段。

嵌套的 If 语句 UFT/QTP

嵌套的 If 语句会将一个完整的 If…End If 语句块放置在另一个 If 语句块的 Then 或 Else 部分中。 UFT/QTP 首先解析外部条件,只有当外部分支被选中时才评估内部的 If 语句。这种模式适用于相互依赖的检查,例如确认用户是否达到投票年龄,然后根据性别再次进行分支,而不是将所有条件合并成一个使用 And 和 Or 的长表达式。嵌套层数要尽量少,通常不超过两到三层,因为每增加一层都会增加脚本的编写难度。 trace 和调试。在 UFT/QTP 嵌套的 If 语句通常会先检查操作系统,然后根据浏览器或应用程序状态再次进行分支,因此内部代码块只有在外部上下文确认后才会运行。

💡提示: 将每个嵌套代码块缩进一级,并让每个 `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

选择 Case 语句 UFT/QTP

当每个分支都针对同一个变量的不同固定值进行测试时,Select Case 可以替代冗长的 ElseIf 链。 UFT/QTP 它会先计算一次 Select Case 行中的表达式,然后按顺序将其与每个 Case 值进行比较,并运行第一个匹配的代码块。可选的 Case Else 用于捕获任何未被列出的 Case 涵盖的值,类似于 If 代码块中的尾随 Else。由于比较变量只写入一次,因此与在每个分支中重复相同变量名的等效 ElseIf 语句链相比,较长的 Select Case 代码块也更容易在以后进行更新。

比较值时使用相等性,并且区分大小写,因此“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
定义 最好的 条件数量 大规模可读性
如果……否则 两种结果 1. 条件 高
如果…否则如果…否则 几种不相关的疾病 3 个或更多条件 随着枝条生长,水滴落下来
选择案例 一个变量的多个固定值 任何数字 保持高位

Case 还可以使用 Is 关键字匹配范围,例如在 Select Case 块中使用 Case Is > 90,这样单个 case 就可以涵盖高于阈值的每个值,而不是单独列出每个值。

当脚本测试一个变量与多个可能的值时,请选择“选择情况”;对于比较不同变量或使用范围和逻辑运算符的条件,请保留“如果…否则如果”。

如何在代码中使用带有 EXISTS 属性的 IF Else 语句 UFT

点击 开始 如果视频无法访问

Exist 属性根据对象当前是否存在于被测应用程序中返回 True 或 False,因此它是与 If Else 语句搭配使用的理想选择。以下示例回顾了经典的登录功能场景。 航班预订 从申请 测试与验证 在这一系列剧集中,当出现错误对话框时,脚本必须跳转到负面场景路径;而当没有出现错误对话框时,脚本则跳转到正面场景路径。这与……完全一致。 测试场景 以上视频已涵盖相关内容。

  1. 录制两个不同的脚本:一个使用有效的代理名称和密码组合登录,另一个使用无效的组合登录。
  2. 在登录步骤之后立即插入一个 If Else 步骤,以便两个录制过程可以在同一个脚本中运行。
  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 传递一个较长的值,例如 Exist(10),会使 UFT 在返回 False 之前等待对象更长时间,这对于加载缓慢的对话框很有用,但如果在每个步骤都使用,则会降低整个测试套件的速度。请将长时间等待留给真正需要长时间等待的对象。一个短而合适的超时时间可以确保组合的正面和负面场景脚本在连续测试运行中既可靠又快速。

常见问题

ElseIf 语句按顺序评估条件,并在遇到第一个匹配项时停止,因此比多个独立的 If 语句块速度更快、代码更清晰。仅当条件彼此无关且必须逐一检查时,才应使用单独的 If 语句。

Exist 使用 UFT 默认同步超时时间为几秒钟,除非在括号内传递自定义值(例如 Exist(10))以等待加载缓慢的对象更长时间。

是的。人工智能助手可以根据测试逻辑的纯文本描述生成 If、ElseIf 和 Select Case 代码块,但测试人员在运行脚本之前仍然应该验证对象名称、属性和超时值。

AI 工具可以扫描脚本,标记不匹配的 End If 语句和无法访问的 Else 块,并提出修复建议,与手动逐行审查长脚本相比,这可以加快调试速度。

是的。在 Case 行中使用 Is 关键字,例如 Case Is > 90,即可匹配所有高于阈值的值,而无需逐个列出。

总结一下这篇文章: