Your test works on your machine. You push it. It fails on Jenkins. You run it again locally — it passes. You run it 10 times — it fails twice. Nobody changed the code. What happened?
Timing. Your test is faster than the web page. It clicks a button and immediately tries to read the result — but the page is still loading. This is the #1 cause of flaky tests in the industry. This chapter teaches you how to fix it permanently.
Waits are asked in every Selenium interview. "What's the difference between implicit and explicit wait?" "Why shouldn't you use Thread.sleep()?" "Which ExpectedCondition do you use for clicking?" — this chapter gives you confident answers.
Key Point: Flaky tests are almost always timing problems. Master waits and your tests become rock-solid.