HTMLUnit doesn't wait for Javascript HTMLUnit doesn't wait for Javascript ajax ajax

HTMLUnit doesn't wait for Javascript


Thank you for responding.I actually should have reported this sooner that I have found the solution myself.Apparently when initialising WebClient with FF:

WebClient webClient = new WebClient(BrowserVersion.FIREFOX_3_6);

It seem to be working.When initialising WebClient with the default constructor it uses IE7 by default and I guess FF has better support for Ajax and is the recommended emulator to use.


I believe by default NicelyResynchronizingAjaxController will only resynchronize AJAX calls that were caused by a user action, by tracking which thread it originated from. Perhaps the GWT generated JavaScript is being called by some other thread which NicelyResynchronizingAjaxController does not want to wait for.

Try declaring your own AjaxController to synchronize with everything regardless of originating thread:

webClient.setAjaxController(new AjaxController(){    @Override    public boolean processSynchron(HtmlPage page, WebRequest request, boolean async)    {        return true;    }});


As documentation states, waitForBackgroundJavaScript is experimental:

Experimental API: May be changed in next release and may not yet work perfectly!

The next approach has always worked for me, regardless of the BrowserVersion used:

int tries = 5;  // Amount of tries to avoid infinite loopwhile (tries > 0 && aCondition) {    tries--;    synchronized(page) {        page.wait(2000);  // How often to check    }}

Note aCondition is whatever you're checking for. EG:

page.getElementById("loading-text-element").asText().equals("Loading...")