Basically, what Austin said.
If you do discover that it is a timing issue, then this one of the classic 'gotchas' with Selenium. What I do in this situation is have a loop which attempts the action we're trying to carry out on the element, such as a click, but do this within a try catch block. Then, if the exception is not thrown, you know that the action has been successful and you break out of the loop.
If, after a certain number of iterations through the loop (you put a thread.sleep at the end of the exception handling code), you are still getting an exception thrown every time, then you throw your own exception to stop the test as there is clearly another issue causing a problem now - spmething is obscuring your element.