A way around this is to call a generic synchronise routine each time you want to wait for an object to exist. By following this practice you can build custom error handling into the synchronise routine without bloating your main automation code. I've built this into my keyword framework so that I always call it before trying to interact with an object, therefore I know that the object must exist before I try to do anything with it. It keeps my code clean and improves the reliability of my scripts.
A basic version of this is below, you can call it by hard coding the maximum wait value or if you want to abstract it further, define the timeout value in an environment variable.
The intMaxWait variable is the time in seconds you are willing to wait. The function returns a true or false value depending on whether or not the object was found.
How to call it:
blnSynced = SynchroniseOnObject(Browser("application a").Page("page b").WebElement("element c"), Environment("CustomTimeout"))
Function Code:
Function SynchroniseOnObject(objRepositoryItem, intMaxWait)
Dim blnObjectFound : blnObjectFound = False
Dim dtStart, intWaitedTime
Dim blnBreak : blnBreak = false
'get the current start time
dtStart = now()
do
'check if the object exists
If objRepositoryItem.Exist(0) Then
blnObjectFound = true
blnBreak = true
Else
'otherwise loop - calculate how long we have waited so far
intWaitedTime = datediff("s",dtStart,now())
If intWaitedTime > intMaxWait then
blnBreak = true
else
'put some code in here to trap any errors,popups etc
End if
End if
loop until blnBreak
SynchroniseOnObject = blnObjectFound
End Function
No comments:
Post a Comment