Strona na której chcę kliknąć przycisk ("Add user") ładuje się "przykryta" elementem, który znika, aż wszystko się wczyta (blockUI blockOverlay) zajmuje to około 150-300ms

Gdy czekam czy element jest klikalny
wait.until(ExpectedConditions.elementToBeClickable(By.xpath("//*[@id='pagecontrols']/input[1]")));
Selenium przechodzi dalej, jednak gdy chcę go kliknąć, nie jest on w rzeczywistości osiągalny i klik idzie w "blockUI blockOverlay"

Próbowałem czekać, aż się się skrypty skończą lądować, ale bez rezultatu return ((JavascriptExecutor)driver).executeScript("return document.readyState").equals("complete");

Dlatego postanowiłem poczekać, aż element zakrywający zniknie

        try {
        	  while ( 
        	    driver.findElement( By.xpath("//div[@class='blockUI blockOverlay']")
        	  ).isDisplayed() ) {
        	  System.out.println("blockOverlay is visible.  Waiting for 10ms.");
        	  Thread.sleep(10);}} 
        	  catch ( Exception nse ) {
        	}

lub
wait.until(ExpectedConditions.invisibilityOfElementLocated(By.xpath("//div[@class='blockUI blockOverlay']")));

rozwiązanie działa, ale ma pewien problem, aby radzić sobie z opóźnieniami w ładowaniu stron używam: driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
jednak w tym przypadku powoduje to, że muszę czekać ponad 10 sekund zanim slenium zwróci mi info, że element już zniknął i mogę iść dalej

Czy ma ktoś jakąś radę ?
Dodam, że w moim teście będzie z pewne wiele takich sytuacji więc gdyby każdy wydłużył czas o 10s to będzie to już problem (globalnie też nie mogę dać niższego czasu, nawet bym chciał go zwiększyć docelowo)

EDIT
A może najlepiej po prostu całkowicie wywalić

driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);

I zamiast tego zawsze samemu sprawdzać czy elementu już jest dostępny przez np wait.until(ExpectedConditions.elementToBeClickable ?
Doda to masę sprawdzeń w teście, których teoretycznie można uniknąć, ale nie będzie niepotrzebnych opóźnień