Thursday, March 22nd, 2007
Automatic testing of Ajax from Java
Ed Burns (of Sun and the JSF expert group) has created an automated testing framework for Ajax in Java called MCP.
This framework stems from an old, old Mozilla project called the Mozilla Web Client started in 1999 as a part of the Sun/AOL/Netscape alliance. The ambitious misson statement of the project is:
The webclient project aims to provide the premier browser-neutral Java API that enables generic web browsing capability. This capability includes, but is not limited to: web content rendering, navigation, a history mechanism, and progress notification. The actual capabilities implemented depend on the underlying browser implementation.
You can tie unit tests into browser ajax events by using an AjaxListener and getting access to items such as the responseText/responseXML/HTTP headers, and more.
- AjaxListener listener = new AjaxListener() {
- public void endAjax(Map eventMap) {
- bitSet.flip(TestFeature.RECEIVED_END_AJAX_EVENT.ordinal());
- if (null != eventMap) {
- bitSet.flip(TestFeature.HAS_MAP.ordinal());
- }
- // Make some assertions about the response text
- String responseText = (String) eventMap.get("responseText");
- if (null != responseText) {
- if (-1 != responseText.indexOf("<partial -response>") &&
- -1 != responseText.indexOf("</partial>")) {
- bitSet.flip(TestFeature.HAS_VALID_RESPONSE_TEXT.ordinal());
- }
- }
- Document responseXML = (Document)
- eventMap.get("responseXML");
- Element rootElement = null, element = null;
- Node node = null;
- String tagName = null;
- try {
- rootElement = responseXML.getDocumentElement();
- tagName = rootElement.getTagName();
- if (tagName.equals("partial-response")) {
- element = (Element) rootElement.getFirstChild();
- tagName = element.getTagName();
- ...
Check out the two part screencast of this in action:





Would this be similiar to HTMLUnit? Would there be advantages to this over HTMLUnit?
It fills this requirement which htmlunit currently does not:
Allows writing tests that make assertions about the response to Ajax requests.
Ed,
How does this relate to JRex?