preload

GUI object synchronization – custom function (QTP, VBScript)

Posted by Albert Gareev on Aug 20, 2009 | Categories: RobustnessSource code

Custom function implementing a more advanced synchronization point.

The function will wait for the object to become existing and enabled, or to disappear (not existing). The maximum time to wait could be defined or taken by default.

Used resources:

Anti sleep function (QTP, VBScript, MercuryTimer, DeviceReplay)

Service Functions – String (QTP, VBScript)


'Default Obj Sync  
Private Const Object_SyncTime_Max = 60 ' 1 minute

Public Function WG_ObjSync(ByRef objName, ByVal objParameter)
 Dim boolRC
 Dim sTypeName
 Dim intSync, boolStateAppear

 'Verify parameters
 sTypeName = TypeName (objParameter)
 If sTypeName <>  "Dictionary" Then
  Set objParameter = CreateObject("Scripting.Dictionary")
 End If

 'Sync
 If objParameter.Exists("p.sync") Then
  intSync = IntVal(objParameter.Item("p.sync"))
  If intSync <= 0 Then
   intSync = Object_SyncTime_Max
  End If
 Else 
  Set objParameter = Nothing
  Exit Function
 End If

 If UCase(objParameter.Item("p.state")) = "DISAPPEAR" Then
  boolStateAppear = FALSE
 Else
  boolStateAppear = TRUE
 End If

 'Sync loop
 MercuryTimers("WG.Timer1").Start

 Do
  boolRC = objName.Exist(0)

  'Check
  Select Case boolStateAppear
   Case TRUE
    If boolRC Then
     boolRC = objName.CheckProperty("enabled", 1, 0)
     If boolRC Then
      MercuryTimers("WG.Timer1").Stop
      Set objParameter = Nothing
      Exit Function
     End If
    End If
   Case FALSE
    If Not boolRC Then
     MercuryTimers("WG.Timer1").Stop
     Set objParameter = Nothing
     Exit Function
    End If
  End Select

  'Anti Sleep
  AntiSleep

  'Timeout?
  If CInt(MercuryTimers("WG.Timer1").ElapsedTime/1000)  > intSync Then
   MercuryTimers("WG.Timer1").Stop
   Set objParameter = Nothing
   Exit Function
  End If
  
 Loop
 
End Function


  • Leave a Reply

    * Required
    ** Your Email is never shared

Creative Commons Attribution-NonCommercial-NoDerivs 3.0 Unported
This work by Albert Gareev is licensed under a Creative Commons Attribution-NonCommercial-NoDerivs 3.0 Unported.