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