Geb Gems: Handling AJAX requests

One of the biggest struggles while testing web applications that use AJAX is dealing with the timing issues caused by asynchronous nature of the request. A common solution is using timeouts to wait for the AJAX call to be completed. This could cause lots of timing issues. Using Geb there is a better way to determine that the AJAX call and its callback has been completed.

In this blog post we will test the W3Schools website which has a button on it which executes an AJAX request:

First we change our baseUrl in the GebConfig.groovy file to the w3school site:

baseUrl = ""

Second we define the W3schools page with the needed content and the makeRequest method which clicks the button.

import geb.Page

class WwwSchoolsAjaxExamplePage extends Page{

  private  static final DEFAULT_DIV_CONTENT = 'Let AJAX change this text'

  static url = "ajax/ajax_example.asp"

  static at = {
      title=="AJAX Example"

  static content = {
      theButton { $(".example button") }
      theResultDiv { $("#myDiv") }

  def makeRequest() {
      waitFor { theResultDiv.text()!=DEFAULT_DIV_CONTENT }


The key statement here is the waitFor line. This will wait till the condition in the closure returns true. The waitFor uses the default timeout configuration which is for Geb 5 seconds.

Next we’re going to make our test which verifies our content has been updated.

import geb.spock.GebReportingSpec

class AjaxRequestSpec extends GebReportingSpec{

  def "Validate if content gets updated after button click"() {

          to WwwSchoolsAjaxExamplePage


           theResultDiv.children()[0].text() == "AJAX is not a new programming language."
           theResultDiv.children()[1].text() == "AJAX is a technique for creating fast and dynamic web pages."



When you run the now run the test, the test will succesfully verify the updated content of the w3schools website.

  • Done with Groovy 2.4.3
Reference: Geb Gems: Handling AJAX requests from our JCG partner Albert van Veen at the JDriven blog.
Notify of

This site uses Akismet to reduce spam. Learn how your comment data is processed.

Inline Feedbacks
View all comments
Back to top button