UFT 中的错误处理
Error handling in UFT
请建议我如何处理这种情况。问题是我得到了一个错误
在从 excel 执行第 1 行的第一次迭代期间的语句 2 然后如何跳过剩余的语句并使用 excel 行 2.
开始执行语句 1
Browser("ABC").Page("ABC").WebEdit("ABC").Set "123"
Dim i
Dim iRow
iRow = datatable.GetRowCount
For i = 1 to iRow
Statement 1- Browser("ABC").Page("").WebEdit("ABC").Set DataTable("DT", dtGlobalSheet)
Statement 2- Browser("ABC").Page("").WebEdit("ABC").Set DataTable("DT", dtGlobalSheet)
Statement 3- Browser("ABC").Page("").WebEdit("ABC").Set DataTable("DT", dtGlobalSheet)
Statement 4- Browser("ABC").Page("").WebEdit("ABC").Set DataTable("DT", dtGlobalSheet)
Statement 5- Browser("ABC").Page("").WebEdit("ABC").Set DataTable("DT", dtGlobalSheet)
datatable.SetNextRow
Next
Excel sheet
Row 1 Row 2 Row 3
step1) 创建一个名称为 "Action2" 的新 Action 并将代码放入 for loop
step2)导入数据到Action2本地数据table
step3) 创建一个恢复场景启用检查每一行恢复功能如
function RecoveryFunction()
ExitActionIteration
End function
step4) 从 Action1 调用 Action2 with allIterations
首先,如果您的测试在 File
->Settings
->Run
中设置为 Run on all rows
那么您不需要代码中的循环- UFT
知道它需要对数据中的每一行进行迭代 table。
其次,您所需要的只是语句,然后检查其成功和任何错误处理。如果出现错误,只需退出测试迭代,UFT
将进入下一个。
我修改后的代码版本:
Browser("ABC").Page("ABC").WebEdit("ABC").Set "123" ' sets an initial value
Browser("ABC").Page("").WebEdit("ABC").Set DataTable("DT1", dtGlobalSheet)
If Browser("ABC").Page("").WebEdit("ABC").GetROProperty("value") <> DataTable("DT1", dtGlobalSheet) Then
' Handle error popup if it exists
Browser("ABCError").Page("").WebButton("OK").Click
ExitTestIteration
End If
Browser("ABC").Page("").WebEdit("CDE").Set DataTable("DT2", dtGlobalSheet)
If Browser("ABC").Page("").WebEdit("CDE").GetROProperty("value") <> DataTable("DT2", dtGlobalSheet) Then
' Handle error popup if it exists
Browser("ABCError").Page("").WebButton("OK").Click
ExitTestIteration
End If
Browser("ABC").Page("").WebEdit("FGH").Set DataTable("DT3", dtGlobalSheet)
If Browser("ABC").Page("").WebEdit("FGH").GetROProperty("value") <> DataTable("DT3", dtGlobalSheet) Then
' Handle error popup if it exists
Browser("ABCError").Page("").WebButton("OK").Click
ExitTestIteration
End If
Browser("ABC").Page("").WebEdit("JKL").Set DataTable("DT4", dtGlobalSheet)
If Browser("ABC").Page("").WebEdit("JKL").GetROProperty("value") <> DataTable("DT4", dtGlobalSheet) Then
' Handle error popup if it exists
Browser("ABCError").Page("").WebButton("OK").Click
ExitTestIteration
End If
Browser("ABC").Page("").WebEdit("MNO").Set DataTable("DT5", dtGlobalSheet)
If Browser("ABC").Page("").WebEdit("MNO").GetROProperty("value") <> DataTable("DT5", dtGlobalSheet) Then
' Handle error popup if it exists
Browser("ABCError").Page("").WebButton("OK").Click
ExitTestIteration
End If
我假设您在问题中重复设置语句 1 等应该模拟设置多个不同的 WebEdit
文本框并编码 5 组作为示例。如果随着迭代的进行,任何文本框 而不是 设置为指定的数据 table 列值(在我的示例中为 DT1 到 DT5),那么 If
条件将得到满足,导致尝试处理错误弹出窗口(您需要修改我猜测的代码以满足您的要求),然后退出测试迭代。退出迭代将触发一个新的迭代开始,因此请确保在退出之前处理任何错误弹出窗口。
如果所有 WebEdit
都成功完成,那么 UFT
将重复您的数据 table.
中定义的所有迭代
您需要决定一件事:您是要使用数据驱动测试的 UFT 方式,还是要完全自己控制
选项 1 - 执行 UFT 方式
- 告诉 Uft 正确解释数据Table - 这意味着执行测试用例的次数与全局中的行数一样多Sheet:应该检查
File->Settings->Run-> Run on all rows
- 告诉 UFT 我们处于数据驱动模式。在同一页面设置设置;
When error occurs during run session to proceed to Next Action Iteration
- uft 将从头开始整个事情但下一行
- 在操作 1 中添加五个语句(仅此而已,UFT 负责其余部分)
选项 2 - 按照您的方式进行
- 看来你已经在做了。您实现循环并遍历 Table
的所有行
- 将 5 条语句提取到函数(和函数库)中
- 创建一个以监督方式调用前一个函数的函数(和函数库)
伪代码
ACTION1
ForEach row In DataTable.GlobalSheet
ExecuteStatementsSupervised row
Next
FUNCTION LIBRARY
Function ExecuteStatementsSupervised(row)
On Error Resume Next
ExecuteStatements row
If Err.Number <> 0 Then
Reporter.ReportEvent micFail, "OOPS Failed"
End If
On Error GoTo 0
End Function
SubExecuteStatements(row)
Statement1
Statement2
....
Statement5
End Sub
因此,在 Action1 中,我们迭代数据Table,在 Supervisor 函数中,如果发生任何事情,我们都会捕获错误,并确保迭代可以继续进行。真正的功能本身,只是执行步骤
请建议我如何处理这种情况。问题是我得到了一个错误 在从 excel 执行第 1 行的第一次迭代期间的语句 2 然后如何跳过剩余的语句并使用 excel 行 2.
开始执行语句 1Browser("ABC").Page("ABC").WebEdit("ABC").Set "123"
Dim i
Dim iRow
iRow = datatable.GetRowCount
For i = 1 to iRow
Statement 1- Browser("ABC").Page("").WebEdit("ABC").Set DataTable("DT", dtGlobalSheet)
Statement 2- Browser("ABC").Page("").WebEdit("ABC").Set DataTable("DT", dtGlobalSheet)
Statement 3- Browser("ABC").Page("").WebEdit("ABC").Set DataTable("DT", dtGlobalSheet)
Statement 4- Browser("ABC").Page("").WebEdit("ABC").Set DataTable("DT", dtGlobalSheet)
Statement 5- Browser("ABC").Page("").WebEdit("ABC").Set DataTable("DT", dtGlobalSheet)
datatable.SetNextRow
Next
Excel sheet
Row 1 Row 2 Row 3
step1) 创建一个名称为 "Action2" 的新 Action 并将代码放入 for loop
step2)导入数据到Action2本地数据table
step3) 创建一个恢复场景启用检查每一行恢复功能如
function RecoveryFunction()
ExitActionIteration
End function
step4) 从 Action1 调用 Action2 with allIterations
首先,如果您的测试在 File
->Settings
->Run
中设置为 Run on all rows
那么您不需要代码中的循环- UFT
知道它需要对数据中的每一行进行迭代 table。
其次,您所需要的只是语句,然后检查其成功和任何错误处理。如果出现错误,只需退出测试迭代,UFT
将进入下一个。
我修改后的代码版本:
Browser("ABC").Page("ABC").WebEdit("ABC").Set "123" ' sets an initial value
Browser("ABC").Page("").WebEdit("ABC").Set DataTable("DT1", dtGlobalSheet)
If Browser("ABC").Page("").WebEdit("ABC").GetROProperty("value") <> DataTable("DT1", dtGlobalSheet) Then
' Handle error popup if it exists
Browser("ABCError").Page("").WebButton("OK").Click
ExitTestIteration
End If
Browser("ABC").Page("").WebEdit("CDE").Set DataTable("DT2", dtGlobalSheet)
If Browser("ABC").Page("").WebEdit("CDE").GetROProperty("value") <> DataTable("DT2", dtGlobalSheet) Then
' Handle error popup if it exists
Browser("ABCError").Page("").WebButton("OK").Click
ExitTestIteration
End If
Browser("ABC").Page("").WebEdit("FGH").Set DataTable("DT3", dtGlobalSheet)
If Browser("ABC").Page("").WebEdit("FGH").GetROProperty("value") <> DataTable("DT3", dtGlobalSheet) Then
' Handle error popup if it exists
Browser("ABCError").Page("").WebButton("OK").Click
ExitTestIteration
End If
Browser("ABC").Page("").WebEdit("JKL").Set DataTable("DT4", dtGlobalSheet)
If Browser("ABC").Page("").WebEdit("JKL").GetROProperty("value") <> DataTable("DT4", dtGlobalSheet) Then
' Handle error popup if it exists
Browser("ABCError").Page("").WebButton("OK").Click
ExitTestIteration
End If
Browser("ABC").Page("").WebEdit("MNO").Set DataTable("DT5", dtGlobalSheet)
If Browser("ABC").Page("").WebEdit("MNO").GetROProperty("value") <> DataTable("DT5", dtGlobalSheet) Then
' Handle error popup if it exists
Browser("ABCError").Page("").WebButton("OK").Click
ExitTestIteration
End If
我假设您在问题中重复设置语句 1 等应该模拟设置多个不同的 WebEdit
文本框并编码 5 组作为示例。如果随着迭代的进行,任何文本框 而不是 设置为指定的数据 table 列值(在我的示例中为 DT1 到 DT5),那么 If
条件将得到满足,导致尝试处理错误弹出窗口(您需要修改我猜测的代码以满足您的要求),然后退出测试迭代。退出迭代将触发一个新的迭代开始,因此请确保在退出之前处理任何错误弹出窗口。
如果所有 WebEdit
都成功完成,那么 UFT
将重复您的数据 table.
您需要决定一件事:您是要使用数据驱动测试的 UFT 方式,还是要完全自己控制
选项 1 - 执行 UFT 方式
- 告诉 Uft 正确解释数据Table - 这意味着执行测试用例的次数与全局中的行数一样多Sheet:应该检查
File->Settings->Run-> Run on all rows
- 告诉 UFT 我们处于数据驱动模式。在同一页面设置设置;
When error occurs during run session to proceed to Next Action Iteration
- uft 将从头开始整个事情但下一行 - 在操作 1 中添加五个语句(仅此而已,UFT 负责其余部分)
选项 2 - 按照您的方式进行
- 看来你已经在做了。您实现循环并遍历 Table 的所有行
- 将 5 条语句提取到函数(和函数库)中
- 创建一个以监督方式调用前一个函数的函数(和函数库)
伪代码
ACTION1
ForEach row In DataTable.GlobalSheet
ExecuteStatementsSupervised row
Next
FUNCTION LIBRARY
Function ExecuteStatementsSupervised(row)
On Error Resume Next
ExecuteStatements row
If Err.Number <> 0 Then
Reporter.ReportEvent micFail, "OOPS Failed"
End If
On Error GoTo 0
End Function
SubExecuteStatements(row)
Statement1
Statement2
....
Statement5
End Sub
因此,在 Action1 中,我们迭代数据Table,在 Supervisor 函数中,如果发生任何事情,我们都会捕获错误,并确保迭代可以继续进行。真正的功能本身,只是执行步骤