package de.flower.common.ui.ajax.behavior.test;
import org.apache.wicket.Component;
import org.apache.wicket.behavior.Behavior;
import org.apache.wicket.markup.html.IHeaderResponse;
/**
* Register pre and post call handler with wicket ajax to be able to track ajax call status from selenium tests.
* Selenium test can then use the 'implicit wait' plugin to wait for ajax calls to finish before proceeding to
* the next selenium command.
*/
public class SeleniumWaitForAjaxSupportBehavior extends Behavior {
@Override
public final void renderHead(final Component component, final IHeaderResponse response) {
super.renderHead(component, response);
String javascript = "Wicket.Ajax.registerPreCallHandler(function() {\n"
+ " // console.log('entering ajax call')\n;"
+ " Wicket.Ajax.insideAjaxCall = true;\n"
+ "}); \n";
javascript += "Wicket.Ajax.registerPostCallHandler(function() {\n"
+ " // console.log('leaving ajax call');\n"
+ " Wicket.Ajax.insideAjaxCall = false;\n"
+ "}); \n";
javascript += "Wicket.Ajax.isAjaxBusy = function() { return Wicket.Ajax.insideAjaxCall == true; }\n";
response.renderJavaScript(javascript, getClass().getName());
}
}