Extension API for custom AJAX/JS widgets for Squish for Web

Extension API for custom AJAX/JS widgets for Squish for Web

At the AJAX World conference this week we got a chance to talk to many AJAX developers and vendors of AJAX toolkits. As a result of that we recognized that we need to give users of Squish for Web the possibility to extend Squish for custom AJAX widgets. This means a way is needed to allow to tell Squish how to recognizing complex, custom AJAX widgets for record, interact with them on replay and to give testers access to the widgets’ APIs. And all this with as little code and as much convenience as possible.

Now we already support many complex AJAX widgets, so the necessary framework and abstractions are present in Squish’s code. So only a way to extend this is needed.

Well, on the plane ride back from NYC to Hamburg I had some time to work on this and it was surprisingly easy to create such an extension API. There are still a few features missing but most of what’s necessary to write such an extension is available now.

So one can now add a JavaScript file to Squish which makes use of a public JS Squish API allowing to implement support for special AJAX widgets. As a proof-of-concept I started implementing support for the IT MILL AJAX framework. All standard clickable widgets (buttons, tabs, etc.) are now recognized and the complex IT MILL tree widget is also completely supported. For all of this only ~60 lines of JS code were necessary.

We will complete the IT MlLL support which now also serves as a proof-of-concept that such a toolkit extension can be implemented completely using Squish JS extension API.

This will become a documented feature of Squish 3.2. This way users can add support for their own widgets, AJAX toolkit vendors can offer support for their toolkits and due to the clean separation between the Squish for Web JS kernel and the toolkit widget extensions it is easier for us to integrate, maintain and add extensions for AJAX widgets and toolkits.

Pretty cool stuff in any way and certainly a good way to tackle the issue of the amount of available AJAX widgets and toolkits while still providing a way to allow creating high-level, robust tests working on widgets rather than on low-level DOM (as most other web test tools do it).