// This was my breakthrough. My first partially working code. public static void clickByLocator( final By locator ) { staticlogger.info( "Click by locator: " + locator.toString() ); final long startTime = System.currentTimeMillis(); driver.manage().timeouts().implicitlyWait( 5, TimeUnit.SECONDS ); Wait wait = new FluentWait( driver ) .withTimeout(90000, TimeUnit.MILLISECONDS) .pollingEvery(5500, TimeUnit.MILLISECONDS); //.ignoring( StaleElementReferenceException.class ); wait.until( new ExpectedCondition() { @Override public Boolean apply( WebDriver webDriver ) { try { webDriver.findElement( locator ).click(); return true; } catch ( StaleElementReferenceException e ) { staticlogger.info( e.getMessage() + "\n"); staticlogger.info("Trying again..."); return false; } } } ); driver.manage().timeouts().implicitlyWait( DEFAULT_IMPLICIT_WAIT, TimeUnit.SECONDS ); long endTime = System.currentTimeMillis(); long totalTime = endTime - startTime; staticlogger.info("Finished click after waiting for " + totalTime + " milliseconds."); }