I've been working with selenium a lot at work recently. There are lots of little nuances to grok if you want your tests to run completely deterministic: especially on a JavaScript-heavy site.
You can also define your own; they are basically functions from a WebDriver object to some other thing (usually a Boolean).
http://seleniumhq.github.io/selenium/docs/api/java/org/openq...