In the second case it is this. org.openqa.selenium.NoSuchElementException
In the first case this seems to escape out. So I changed my first clause to this. }catch( NoSuchElementException nse ){ print "Catch clause " + nse }catch( Exception e ){ print "Catch clause " + e } It prints org.openqa.selenium.NoSuchElementException if I catch 'Exception'. Does this have anything to do with the 'closure' shown in this trace ? at com.automation.pages.PageObjectLayer$_waitUntil_closure2.doCall(PageObjectLayer.groovy:39) at org.openqa.selenium.support.ui.FluentWait.until(FluentWait.java:208) at com.automation.pages.PageObjectLayer.waitUntil(PageObjectLayer.groovy:39) at com.automation.page.test.WidgetTest.waitUntilNoSuchWidgetExceptionWithMessage(WidgetTest.groovy:54) Thanks. On 8 January 2018 at 19:28, Paul King <pa...@asert.com.au> wrote: > What does printing out `nse` in both cases show? > > On Mon, Jan 8, 2018 at 11:02 PM, Mohan Radhakrishnan < > radhakrishnan.mo...@gmail.com> wrote: > >> Hello, >> >> These catch clauses are somehow different from each other. Why ? >> >> In the first case 'NoSuchElementException' is somehow escaping the >> 'catch' block. My test fails. >> >> But the second clause succeeds as expected. >> >> Clause 1 : >> >> catch( NoSuchElementException nse ){ >> >> throw new NoSuchWidgetException( " Element " + by.toString() + " not >> found" + >> " after polling for [" + >> pollingInterval.longValue() + >> "] with timeout set to [" + >> timeOut.longValue() ); >> } >> >> >> Clause 2 : >> >> try{ >> WaitForWidget<Widget> wait = >> new WaitForWidget<WebDriver>(wd). >> pollingEvery(pollingInterval.longValue(),unit). >> withTimeout(timeOut.longValue(),unit). >> withMessage(supplierClosure) >> >> wait.until( { wd.findElement( by )} as Function ) >> }catch( nse ){ >> throw new NoSuchWidgetException( " Element " + by.toString() + " not >> found" + >> " after polling for [" + >> pollingInterval.longValue() + >> "] with timeout set to [" + >> timeOut.longValue() ); >> } >> >> Thanks, >> Mohan >> > >