I've timed it, and I know it takes 5 seconds for the page to load
You would be surprised how often people say this. They then tend to add something like this to their scripts:
Thread.sleep(5000);
Code like this will never work reliably. It doesn't take into account any external variables, and it will slow your tests down. What do we mean by external variables? Well, we have the following.
Machine specification
Different machines have different specifications. It sounds obvious, yet it is something that many people who write automation scripts do not take into account. A slow machine with very little memory will run your scripts much slower than a fast machine. It will probably take it longer to render the page that you are testing. This means that the web element that has been rendered instantly on a fast machine may not actually be there for a few hundred milliseconds on a slow machine. This is long enough to cause an error in your test, but not long enough for it to be instantly obvious to...