0

请建议我如何处理这种情况。问题是我在执行第 1 行从 excel 的第一次迭代期间在语句 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

电子表格

第 1 行 第 2 行 第 3 行

4

3 回答 3

0

step1)创建一个名为“Action2”的新动作并将代码从内部for循环

step2)将数据导入Action2本地数据表

step3)创建一个恢复场景启用检查每行恢复功能为

     function RecoveryFunction()
         ExitActionIteration
     End function

step4)从 Action1 用 allIterations 调用 Action2

于 2018-04-03T10:34:50.443 回答
0

首先,如果您的测试设置为Run on all rowsin File-> Settings->Run那么您不需要代码中的循环 -UFT知道它需要对数据表中的每一行进行迭代。

其次,您需要的只是语句,然后检查其成功和任何错误处理。如果出现错误,只需退出测试迭代,然后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

我假设您在问题中重复设置 Statement 1 等应该模拟设置许多不同的WebEdit文本框并编码 5 个集合作为示例。如果随着迭代的进行,任何文本框都没有设置为指定的数据表列值(在我的示例中为 DT1 到 DT5),那么If条件将被满足,导致尝试处理错误弹出窗口(您需要修改我猜测的代码以满足您的要求),然后退出测试迭代。退出迭代将触发一个新的迭代,因此请确保在退出之前处理任何错误弹出窗口。

如果所有WebEdits 都成功完成,那么UFT将重复数据表中定义的所有迭代。

于 2018-04-03T15:26:51.047 回答
0

您需要决定一件事:您是要使用UFT 的数据驱动测试方式,还是要自己控制整个过程

选项 1 - 采用 UFT 方式

  1. 告诉 Uft 正确解释 DataTable - 意味着执行测试用例的次数与全局表中的行数一样多:File->Settings->Run-> Run on all rows应该检查
  2. 告诉 UFT 我们处于数据驱动模式。在同一页面设置设置;When error occurs during run session to proceed to Next Action Iteration- uft 将从开头但下一行开始整个事情
  3. 在操作 1 中添加五个语句(仅此而已,UFT 负责其余部分)

选项 2 - 以你的方式去做

  1. 好像你已经在做。您实现循环并遍历表的所有行
  2. 将 5 条语句提取到一个函数(和函数库)中
  3. 创建一个以监督方式调用前一个函数的函数(和函数库)

伪代码

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 中,我们迭代 DataTable,在 Supervisor 函数中,如果发生任何事情,我们就会捕获错误,并确保迭代可以继续进行。真正的功能本身,只是执行步骤

于 2018-06-07T15:59:08.353 回答