This document discusses testing user interfaces (UIs) for rich web applications. It presents an evolution of UI testing approaches, from low-level tests that rely on threads and waits to higher-level tests using page object patterns. It advocates wrapping UI components to abstract away technical details and create more readable, maintainable tests. The document also outlines principles for UI testing such as simplicity, extensibility and being designed to fail fast.