= 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 and the server backend. 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 there is no real callback system to the browserbot. 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 made huge changes and improvements to the way the js frontend works, integrating a much better logging object, peformance framework, and an improved api. And finally the communication between the frontend and backend is incredibly detailed, even chatty, making things like logging and continuous test integration much easier.