Mission Statement

Windmill is a web testing framework intended for complete automation of user interface testing, with strong test debugging capabilities.

History and Goals

Windmill was made possible by the work originally done at the Selenium project. Selenium solved two major problems, they first developed a browserbot that could execute user simulated interactions across all browsers, and second they wrote a proxy that would serve out the browserbot and overcome the same-domain browser security policy. The windmill code base is, more or less, completely written new from the ground up and takes a much different approach to integration between the browserbot frontend (now the IDE and controller) and the server backend (referred to here as the "service").

The first goal of Windmill to make test writing easier, portable and sustainable. Test writing and debugging is an interactive process and requires an architecture that allows for large amounts of flexibility and back-and-forth communication. This is where another project, outside of Selenium, was absolutely necessary. Because of the architectural decisions in Selenium interaction from a supported target language is minimal at best, and the lack of communication workflow between the browserbot and the server made debugging very difficult. Our architecture is discussed in more detail on WindmillArchitecture.

The second goal of Windmill is to keep the project open and transparent, encouraging as much outside contribution as possible. This goal is shared by every project at OSAF and we have a pretty good record of accomplishing transparency in our projects.

Windmill

Windmill is named as such because of the continuous motion of a windmill. The idea is that test writing and debugging is a process of continuous input and feedback, and once a test is written it should be a seamless process to have it running repeatedly. This process illustrates our first goal outlined above.

Using XMLRPC each target language can have good objects for interacting with the browser through constant communication and callbacks to the browserbot over JSONRPC. We've also created an interactive in-browser IDE, peformance framework, and much easier and flexible controller API. And finally the communication between the IDE and the service is incredibly detailed, even chatty, making things like logging and continuous test integration much easier. More on WindmillArchitecture.