SAFFRON框架源代码

    技术2022-05-20  28

    '************************************************************' S.A.F.F.R.O.N. Prototype 1.1'' Simple Automation Framework For Remarkably Obvious Notes' Copyright © 2006 Mercury Interactive Corporation '' Notes:'' Requires QuickTest Professional 9.1'' Author       : Adam Gensler' Created      : July 12, 2006' Last Updated : September 11, 2006'' This prototype framework is provided AS IS, and is meant' to be used for instructional purposes.'' This framework is a prototype, and is not supported' by Mercury Interactive.''************************************************************initialized = falsethirdlevel = ""level = ""desc = ""object = ""objectDescription = ""

    levelsubdescriptiondelimiter = ","leveldescdelimiter = "|"objectdelimiter = "|"leveldelimiter = "|"objectsDescriptiondelimiter = "|"

    webLevels = "Browser|Page|Frame"webLevelsDesc = "micclass:=Browser|micclass:=Page|micclass:=Frame|"objects = "Link|WebButton|WebList|WebEdit"objectsDescription = "micclass:=Link|micclass:=WebButton|micclass:=WebList|micclass:=WebEdit"

    ' Generates a generic description based up on the "level" viarable' levelstr - will be one of the values that is in the level array' returns - string representative of the object hierarchyPublic Function GenerateDescription (levelstr) l = IndexOf(level, levelstr) If l >=0 Then  fdesc = level(0) & "(" & Quote(desc(0)) & ")."  If l >= 1 Then   fdesc = fdesc + level(1) & "(" & Quote(desc(1)) & ")."   If 2 >= l Then    If thirdlevel <> "" Then     fdesc = fdesc + level(2) & "(" & Quote(desc(2)) & "," & Quote("name:=" & thirdlevel) & ")."    End If   End If  End If End If   GenerateDescription = fdescEnd Function

    ' Generates an object description based upon the object, and objectDescription arrays' obj - name of the object in the object array' prop - additional property to help uniquely identify the object' returns - a string representative of the object descriptionPublic Function GenerateObjectDescription (obj, prop) i = IndexOf(object, obj) ndesc = ""   If i <> -1 Then  ndesc = obj & "(" & Quote(objectDescription(i)) & "," & Quote(prop) & ")." End If GenerateobjectDescription = ndescEnd Function

    ' given an array, returns the index of the value to search for' ary - an array' str - value to search for in an array' returns - index in arrayPublic Function IndexOf (ary, str) val = -1 For i = 0 to UBound(ary)  If ary(i) = str Then   val = i  End If Next IndexOf = valEnd Function

    ' configures framework to work within the context of a specific frame' val - the Name of the frame to work within -- use Object Spy if you don't'       already know the frame namePublic Function WorkInFrame (val) Report micPass, "Enter Frame", "Entered scope of frame " & Quote(val) thirdlevel = valEnd Function

    ' configures the framework to work outside the context of a specific framePublic Function StopWorkingInFrame Report micPass, "Exit Frame", "Exited scope of frame " & Quote(thirdlevel) thirdlevel = ""End Function

    ' generates a string with embedded/surrounding quotesPublic Function Quote (txt) Quote = chr(34) & txt & chr(34)End Function

    ' navigate to a site if the browser is already opened, otherwise run initializationPublic Function BrowseTo (url) thirdlevel = "" Report micPass, "Navigate to URL", "Navigating to URL: " & Quote(url) If initialized Then  Execute GenerateDescription("Browser") & "Navigate " & Quote(url) Else  Launch "website", url End If Reporter.Filter = rfDisableAllEnd Function

    ' waits for the web page to finish loadingPublic Function AutoSync    Execute GenerateDescription("Browser") & "Sync"End Function

    ' close all opened browsersPublic Function CloseBrowsers If Browser("micclass:=Browser").Exist (0) Then  Browser("micclass:=Browser").Close End If While Browser("micclass:=Browser", "index:=1").Exist (0)  Browser("index:=1").Close Wend If Browser("micclass:=Browser").Exist (0) Then  Browser("micclass:=Browser").Close End IfEnd Function

    ' prepares the framework for usage, and configures all internal framework ' variables and structures' apptype - used to launch different types of applications based '           upon different technologies -- currently there is only web' val     - string that represents what to launch' returns - always returns truePublic Function Launch (apptype, val) If "website" = apptype Then  thirdlevel = ""  Report micPass, "Initialize", "Initializing Framework"  level = split(webLevels, leveldelimiter, -1, 1)  desc = split(webLevelsDesc, leveldescdelimiter, -1, 1)  object = split(objects, objectdelimiter, -1, 1)  objectDescription = split(objectsDescription, objectsDescriptiondelimiter, -1, 1)  CloseBrowsers  Set IE = CreateObject("InternetExplorer.Application")  IE.visible = true  IE.Navigate val  While IE.Busy   wait 1  Wend End If initialized = true Launch = trueEnd Function

    ' Verify the Existence of an object' objtype - values should be limited to values in the object array' text    - multi-purpose argument that indicates what to verify'         - for a link, or button, it's the text of the control'         - for a list, it's the name of the control'         - for a frame, it's the name of the framePublic Function Verify (objtype, text)   rval = false localDesc = "" estr = "" If thirdlevel <> "" Then  localDesc = GenerateDescription(level(2)) Else  localDesc = GenerateDescription(level(1)) End If

       AutoSync()

     Select Case objtype Case "Page"  Execute "rval = " & GenerateDescription(level(1)) & "Exist (0)"  If rval Then   Execute "title = " & GenerateDescription(level(1)) & "GetROProperty(" & Quote("title") & ")"   If title = text Then    rval = true   Else     rval = false   End If  End If Case "CurrentFrame"  If thirdlevel <> "" Then   estr = "rval = " & localDesc  End If Case "Link"  estr =  "rval = " & localDesc & GenerateObjectDescription("Link", "innertext:=" & text) Case "WebButton"  estr = "rval = " & localDesc & GenerateObjectDescription("WebButton", "value:=" & text) Case "WebList"  estr = "rval = " & localDesc & GenerateObjectDescription("WebList", "name:=" & text) Case "WebEdit"  estr = "rval = " & localDesc & GenerateObjectDescription("WebEdit", "name:=" & text) End Select

     If estr <> "" Then  Execute estr + "Exist (0)" End If

     If rval Then  Report micPass, objtype & " Verification", "The " & objtype & " " & Quote(text) & " was verified to exist" Else  Report micFail, objtype & "  Verification", "The " & objtype & " " & Quote(text) & " was not found" End If

     If "True" = rval Then  rval = True Else  rval = False End If

       Verify = rvalEnd Function

    ' Activates an object based upon its object type' objtype - the type of object should be limited to values in the object array' text    - identifying text for the control - for a link, it's the text of the linkPublic Function Activate (objtype, text) localDesc = "" If thirdlevel <> "" Then  localDesc = GenerateDescription(level(2)) Else  localDesc = GenerateDescription(level(1)) End If

     AutoSync() 

     Select Case objtype Case  "Link"  Execute localDesc & GenerateObjectDescription("Link","innertext:=" & text) & "Click"  Report micPass, "Link Activation", "The Link " & Quote(text) & " was clicked." Case "WebButton"  Execute localDesc & GenerateObjectDescription("WebButton", "value:=" & text) & "Click"  Report micPass, "WebButton Activation", "The WebButton " & Quote(text) & " was clicked." End SelectEnd Function

    ' Selects a specific value from a listbox, or combobox' objname - name of the control -- use Object Spy if you don't know the name property' text    - the item in the combobox to selectPublic Function SelectFromList (objname, text) localDesc = "" rv = "" rval = false If thirdlevel <> "" Then  localDesc = GenerateDescription(level(2)) Else  localDesc = GenerateDescription(level(1)) End If

     AutoSync() 

     localDesc = localdesc & GenerateObjectDescription("WebList", "name:=" & objname)

     Execute "cnt = " & localDesc & "GetROProperty(" & Quote("items count") & ")" For i = 1 to cnt  Execute "rv = " & localDesc & "GetItem (" & i & ")"  If rv = text Then   rval = true  End If Next

     If rval Then  Execute localDesc & "Select " & Quote(text) End If If rval Then  Report micPass, "WebList Selection", "The WebList item " & Quote(text) & " was selected." Else  Report micFail, "WebList Selection", "The WebList item " & Quote(text) & " was NOT found." End If

     SelectFromList = rvalEnd Function

    ' Enters text into an edit field' objname - name of the control -- use Object Spy if you don't know what it is' text    - the text to enter into the controlPublic Function EnterTextIn (objname, text) localDesc = "" rval = true If thirdlevel <> "" Then  localDesc = GenerateDescription(level(2)) Else  localDesc = GenerateDescription(level(1)) End If

     AutoSync()

     localDesc = localdesc & GenerateObjectDescription("WebEdit", "name:=" & objname) Execute localDesc & "Set (" & Quote(text) & ")" Report micPass, "Enter Text", "Text: " & Quote(text) & " was entered into " & Quote(objname) EnterTextIn = rval End Function

    ' Obtains text from a control' objtype - is the type of control the get the text from' objname - is the name of the control -- use Object Spy if you don't know the name' returns - the text of the controlPublic Function GetTextFrom (objtype, objname) text = "" localDesc = "" If thirdlevel <> "" Then  localDesc = GenerateDescription(level(2)) Else  localDesc = GenerateDescription(level(1)) End If

     AutoSync()

     Select Case objtype  Case "WebEdit"   Execute "text = " & localDesc & GenerateObjectDescription("WebEdit", "name:=" & objname) & "GetROProperty (" & Quote("value") & ")"  Case "WebList"   Execute "text = " & localDesc & GenerateObjectDescription("WebList", "name:=" & objname) & "GetROProperty (" & Quote("value") & ")" End Select Report micPass, "Capture Text", "Text: " & Quote(text) & " was captured from the control " & Quote(objname) GetTextFrom = textEnd Function

    ' Wrapper for the Reporter.Report Event method ' - could be used to create custom reports more easily' See Reporter.ReportEvent documentation for usagePublic Function Report (status, objtype, text) Reporter.Filter = rtEnableAll Reporter.ReportEvent status, objtype, text Reporter.Filter = rfDisableAllEnd Function


    最新回复(0)