Search code examples
grailsgroovyclosuresfunctional-testinggeb

WithNewWindow() returns MultipleCompilationErrorsException in Geb


I am getting weird error in my geb functional tests.

 org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed:
Spec expression: 1: expecting '}', found 'assert' @ line 1, column 71.
    } ) { at(JobOfferDetailPage) assert des

My test looks like this. I click on a link which opens a new window with details of the job offer. Than I want to assert some text on the new page using Page Pattern.

Test:

withNewWindow( { quickShowOption.click() } ) { //TODO fix me
                    at(JobOfferDetailPage)
                    assert description.text() == 'some text'
                    assert requirements.text() == 'some text'
                    assert advatages.text() == 'some text.'
                    assert categories.text() == 'some text'
                    assert locality.text() == 'some text'
                }

Page:

class JobOfferDetailPage extends Page {
    static at = {$('#contactLabel').text() == 'Contact'}

    static content = {
        description {$('#jobOfferDescription')}
        requirements {$('#jobOfferRequirements')}
        advatages {$('#jobOfferAdvantages')}
        jobOfferType {$('#jobOfferType')}
        categories {$('#categories')}
        locality {$('#locality')}
        startDate {$('#startDate')}
        requiredLanguages {$('#requiredLanguages')}
    }
}

I get compilation error after my conditions are asserted. If I make a typo in asserted text than the test will fail normally, but if it passes, than it fails with this weird error.


Thank you @Erdi.

I use spock,geb versions "0.13.1" and selenium version "2.51.0".


Solution

  • If one was to believe this comment in one of Geb's own tests, which was nota bene written by me some time ago, this indeed seems like some sort of bug in Spock. What is interesting is that I just now moved that statement to an expect block and it works as long as the last statement in the second closure passed to newWindow() evaluates to true. This makes me think that it is an issue with old version of Spock and/or Groovy. Which versions of the aforementioned tools are you using?

    One possible workaround would be to move your statement from expect/then to one that is not asserting (given or when) as shown in the test I linked to.