verifyElementInViewport is throwing stepfailed exception

Hi,
I am trying to use the verifyElementInViewport to make sure if the element is in the viewport. If it returns false then it needs to click on the link to bring the element to the viewport. For that, I have a while loop. The issue here is that the method is throwing step failed exception and not even going into the while loop.

boolean value = true
int i=0
try{
WebUI.delay(1)
TestObject staffAssistSearchTileTO = makeTOwithXPath(element)
value = WebUI.verifyElementInViewport(staffAssistSearchTileTO, 5, FailureHandling.CONTINUE_ON_FAILURE)

  	while(value ==false){

  		staffAssistLink.click()
  		WebUI.delay(1)
  		try{
  			value = WebUI.verifyElementInViewport(staffAssistSearchTileTO, 5)
  			if (value == true){
  				println("Element displated in "+i+" secs")
  				break;
  			}
  		}catch(Exception e){
  		}
  		i++
  		if (i == timeout){
  			value = false
  			
  			break;
  		}
  	}
  }
  catch (StepFailedException e) {
  }

In the console the following error is thrown

2020-07-10 14:17:12.036 ERROR c.k.k.core.keyword.internal.KeywordMain - :x: Object ‘’ is present but is not visible in viewport (Root cause: com.kms.katalon.core.exception.StepFailedException: Object ‘’ is present but is not visible in viewport
at com.kms.katalon.core.webui.keyword.internal.WebUIKeywordMain.stepFailed(WebUIKeywordMain.groovy:64)
at com.kms.katalon.core.webui.keyword.builtin.VerifyElementVisibleInViewportKeyword$_verifyElementVisibleInViewport_closure1.doCall(VerifyElementVisibleInViewportKeyword.groovy:79)
at com.kms.katalon.core.webui.keyword.builtin.VerifyElementVisibleInViewportKeyword$_verifyElementVisibleInViewport_closure1.call(VerifyElementVisibleInViewportKeyword.groovy)
at com.kms.katalon.core.webui.keyword.internal.WebUIKeywordMain.runKeyword(WebUIKeywordMain.groovy:20)
at com.kms.katalon.core.webui.keyword.builtin.VerifyElementVisibleInViewportKeyword.verifyElementVisibleInViewport(VerifyElementVisibleInViewportKeyword.groovy:86)
at com.kms.katalon.core.webui.keyword.builtin.VerifyElementVisibleInViewportKeyword.execute(VerifyElementVisibleInViewportKeyword.groovy:68)
at com.kms.katalon.core.keyword.internal.KeywordExecutor.executeKeywordForPlatform(KeywordExecutor.groovy:72)
at com.kms.katalon.core.webui.keyword.WebUiBuiltInKeywords.verifyElementInViewport(WebUiBuiltInKeywords.groovy:3049)
at com.kms.katalon.core.webui.keyword.WebUiBuiltInKeywords$verifyElementInViewport$3.call(Unknown Source)
at utilityMethod.utilities.isVisibleInViewport(utilities.groovy:238)
at utilityMethod.utilities$isVisibleInViewport$2.callStatic(Unknown Source)
at internal_Client_Application.run(internal_Client_Application:48)
at com.kms.katalon.core.main.ScriptEngine.run(ScriptEngine.java:194)
at com.kms.katalon.core.main.ScriptEngine.runScriptAsRawText(ScriptEngine.java:119)
at com.kms.katalon.core.main.TestCaseExecutor.runScript(TestCaseExecutor.java:337)
at com.kms.katalon.core.main.TestCaseExecutor.doExecute(TestCaseExecutor.java:328)
at com.kms.katalon.core.main.TestCaseExecutor.processExecutionPhase(TestCaseExecutor.java:307)
at com.kms.katalon.core.main.TestCaseExecutor.accessMainPhase(TestCaseExecutor.java:299)
at com.kms.katalon.core.main.TestCaseExecutor.execute(TestCaseExecutor.java:233)
at com.kms.katalon.core.main.TestCaseMain.runTestCase(TestCaseMain.java:114)
at com.kms.katalon.core.keyword.builtin.CallTestCaseKeyword$_callTestCase_closure1.doCall(CallTestCaseKeyword.groovy:59)
at com.kms.katalon.core.keyword.builtin.CallTestCaseKeyword$_callTestCase_closure1.call(CallTestCaseKeyword.groovy)
at com.kms.katalon.core.keyword.internal.KeywordMain.runKeyword(KeywordMain.groovy:68)
at com.kms.katalon.core.keyword.builtin.CallTestCaseKeyword.callTestCase(CallTestCaseKeyword.groovy:81)
at com.kms.katalon.core.keyword.builtin.CallTestCaseKeyword.execute(CallTestCaseKeyword.groovy:44)
at com.kms.katalon.core.keyword.internal.KeywordExecutor.executeKeywordForPlatform(KeywordExecutor.groovy:72)
at com.kms.katalon.core.keyword.BuiltinKeywords.callTestCase(BuiltinKeywords.groovy:334)
at verify_StatusCodes.run(verify_StatusCodes:53)
at com.kms.katalon.core.main.ScriptEngine.run(ScriptEngine.java:194)
at com.kms.katalon.core.main.ScriptEngine.runScriptAsRawText(ScriptEngine.java:119)
at com.kms.katalon.core.main.TestCaseExecutor.runScript(TestCaseExecutor.java:337)
at com.kms.katalon.core.main.TestCaseExecutor.doExecute(TestCaseExecutor.java:328)
at com.kms.katalon.core.main.TestCaseExecutor.processExecutionPhase(TestCaseExecutor.java:307)
at com.kms.katalon.core.main.TestCaseExecutor.accessMainPhase(TestCaseExecutor.java:299)
at com.kms.katalon.core.main.TestCaseExecutor.execute(TestCaseExecutor.java:233)
at com.kms.katalon.core.main.TestSuiteExecutor.accessTestCaseMainPhase(TestSuiteExecutor.java:169)
at com.kms.katalon.core.main.TestSuiteExecutor.accessTestSuiteMainPhase(TestSuiteExecutor.java:142)
at com.kms.katalon.core.main.TestSuiteExecutor.execute(TestSuiteExecutor.java:91)
at com.kms.katalon.core.main.TestCaseMain.startTestSuite(TestCaseMain.java:157)
at com.kms.katalon.core.main.TestCaseMain$startTestSuite$0.call(Unknown Source)
at TempTestSuite1594412164775.run(TempTestSuite1594412164775.groovy:37)
)

To me, it seems that the TestObject is NOT pointing any HTML element. I think that you should make sure if the TestObject is valid or not (if the XPath is correct or not).

How to do it? Please try the following.

try {
    TestObject staffAssistSearchTileTO = makeTOwithXPath(element)
    WebUI.verifyElementPresent(staffAssistSearchTileTO, 10, FailureHandling.STOP_ON_FAILURE)
    ...

The element is present in the html but its below the viewport. Even after clicking on the link sometimes it will not scroll to the view completely. So I added while loop to make sure its scrolled to viewport. The issue here is the exception is not catch by the try catch statement. The script is working after moving the while loop to catch block but still getting the exception. How to catch the exception and not throw in the console