代码之家  ›  专栏  ›  技术社区  ›  Salek

无法从Excel中读取参数名称(!not value)

  •  0
  • Salek  · 技术社区  · 8 年前

    Keyword=Trim(TS_Sheet.cells(j,"D"))
    Arg1=Trim(TS_Sheet.cells(j,"E"))
    Arg2=Trim(TS_Sheet.cells(j,"F"))
    Arg3=Trim(TS_Sheet.cells(j,"G"))
    Arg4=Trim(TS_Sheet.cells(j,"H"))
    'Execute the corresponding test Steps(Or Keywords)
    Call_Function Keyword, Arg1, Arg2, Arg3, Arg4
    

    Function Call_Function (Keyword, Arg1, Arg2, Arg3, Arg4)
    On Error Resume Next
    Print "Keyword for execution is:- " & Keyword
    Dim subS1 : Set subS1 = GetRef(cstr(Keyword))(Arg1, Arg2, Arg3, Arg4)
        If Err.Num<>0 Then
            Msgbox "Error: "&Err.Num, "OK", "Runtime Error "&Err.Num
            reporter.ReportNote "Error occured: "&Err.Num&" keyword: "&keyword&" TCID: "&TCID&" TSID: "&TSID
        End If
    Mybrowser.Sync
    Err.Clear
    On Error GoTo 0
    Set subS1 = Nothing
    End Function
    

    MyBrowser.WebButton("html id:=.*"&Arg2).WaitProperty ("disabled", Arg4, 1)
    

    但我需要从Excel中传递参数以使其更具动态性,如

    MyBrowser.ChildObject("micclass:=.*"&Arg1, "html id:=.*"&Arg2).WaitProperty (Arg3, Arg4, 1)
    

    到目前为止,它没有起作用。QTP只是跳过了这部分代码。 我尝试了以下方法:

    Function Wait_Property (Arg1, Arg2, Arg3, Arg4)
        Process=".."
        Do
        For Iterator = 1 To 100 Step 0.5 '///this can be any number just to make sure loop executes long enough to property to be reached
        If MyBrowser.ChildObject("micclass:=.*"&Arg1, "html id:=.*"&Arg2).WaitProperty (Arg3, Arg4, 0.1) Then
            Print "Reached."
            Exit Do
        Else
            Print "Wait. Processing.."&Process
            Wait 0.5
        End If
        Process = Process+".."
        Next
        Loop While False
    End Function
    

    ...If MyBrowser.ChildObject("micclass:=.*"&Arg1, "html id:=.*"&Arg2, Arg3=Arg4).Exist Then... 但QTP仍然忽略了这一点。

    发生了什么?还有别的方法吗?

    以下内容正在运行:

    PropWait = cstr(Browser("micclass:=Browser","CreationTime:=0","name:=.*").page("micclass:=Page","CreationTime:=0","Title:=.*").WebButton("html id:=.*"&Arg2).GetROProperty(Arg3))
    Do Until cstr(PropWait) = cstr(Arg4)
    If PropWait = Arg4 Then
        Exit Do
        ElseIf PropWait = "" Then 
    print "PropWait Empty"
        Exit Do
        Else
    End If
    Wait 2
    Print PropWait&" : Wait. Processing.."&Process
    Process = Process+".."
    PropWait = cstr(Browser("micclass:=Browser","CreationTime:=0","name:=.*").page("micclass:=Page","CreationTime:=0","Title:=.*").WebButton("html id:=.*"&Arg2).GetROProperty(Arg3))
    Loop
    

    但我也需要micclass保持动态。

    添加了说明。创建到以前的更新:

    Dim WaitObj : Set WaitObj = Description.Create
    WaitObj("micclass").Value = Arg1
    WaitObj("html id").Value = Arg2
    
    PropWait = Browser("micclass:=Browser","name:=.*").page("micclass:=Page","Title:=.*").ChildObjects(WaitObj).GetROProperty(Arg3)
    

    但是QTP跳过了它,以及和平之后的一切。

    UPD 3 :

    On Error Resume Next 在里面 Call_Function ,但现在在第一步(即打开浏览器)之后,它返回错误:

    UPD 4: 出错时继续下一步 在Wait_属性函数中:( 出错时继续下一步 Call_函数 未注释)

    Function Wait_Property (Arg1, Arg2, Arg3, Arg4)
    On Error Resume Next
    ...
    

    PropWait公司=

    1 回复  |  直到 8 年前
        1
  •  1
  •   Salek    8 年前

    最后,下一个是有效的:

    Function Wait_Property (Arg1, Arg2, Arg3, Arg4)
    print "Test Function Call"
    
    Dim WObj : Set WObj = Description.Create()
    WObj("micclass").Value = Arg1
    WObj("html id").Value = Arg2
    
    Dim ObjColl : Set ObjColl = MyBrowser.ChildObjects(WObj)
    For t = 0 To ObjColl.Count-1
    'print "count:="&ObjColl.Count
      WaitPro = cstr(ObjColl(t).GetROProperty(Arg3))
      Do Until WaitPro = Arg4
        print "Wait. Progress..."&Progress
        wait 2
        Progress = Progress+".."
        Set ObjColl = MyBrowser.ChildObjects(WObj)
        WaitPro = cstr(ObjColl(t).GetROProperty(Arg3))
      Loop
      print "Function Executed"
    Next
    
    Set WObj = Nothing
    End Function