Careeroza
Thread.sleep Problems
The Tempting Fix
driver.findElement(By.id("login-btn")).click();
Thread.sleep(5000); // wait 5 seconds, always
driver.findElement(By.id("welcome")).getText();- Too slow: if the page is ready after 0.8 s, you still waste 4.2 s. 300 tests × 3 sleeps × 4 s = 1 hour of nothing.
- Still flaky: if the server takes 6 s today, the test fails anyway.
- It hides the real problem and must be guessed again for every step.
Fixed Sleep vs Polling
Example
This simulation compares a fixed 5 s sleep with polling every 500 ms for elements that appear at different times:
public class Main {
public static void main(String[] args) {
int[] readyAfterMs = {800, 2300, 6200};
for (int ready : readyAfterMs) {
String sleepResult = ready <= 5000 ? "pass, waited 5000 ms" : "FAIL after 5000 ms";
int waited = 0;
while (waited < ready && waited < 10000) waited += 500; // poll up to 10 s
String pollResult = ready <= 10000 ? "pass, waited " + waited + " ms" : "FAIL";
System.out.printf("ready at %4d ms | sleep(5000): %-22s | poll: %s%n", ready, sleepResult, pollResult);
}
}
}Output
ready at 800 ms | sleep(5000): pass, waited 5000 ms | poll: pass, waited 1000 ms ready at 2300 ms | sleep(5000): pass, waited 5000 ms | poll: pass, waited 2500 ms ready at 6200 ms | sleep(5000): FAIL after 5000 ms | poll: pass, waited 6500 ms
Tip: Rule in most teams: Thread.sleep is not allowed in tests. Code review will reject it.