Hi all,

 

I'm trying to create some DSL for my application. And here is what I have done till now; The groovy script below calls the DSL after setting up the base script class etc.

 

def handler = new SeleniumCallHandler()

def binding = new Binding(driver: handler.getDriver(),seleniumcallhandler: handler)

 

def importCustomizer = new ImportCustomizer();

importCustomizer.addImport("By","org.openqa.selenium.By")

 

def config = new CompilerConfiguration();

config.addCompilationCustomizers importCustomizer

config.scriptBaseClass = SeleniumBaseScript.name

 

//driver.findElement(By.id("lst-ib")).sendKeys("Selenium!")

 

def shell = new GroovyShell(this.class.classLoader,binding,config)

 

shell.evaluate(new File("loadGroovyPage.groovy"))

 

and SeleniumBaseScript:

abstract class SeleniumBaseScript extends Script {

    @Delegate @Lazy SeleniumCallHandler seleniumcallhandler = this.binding.seleniumcallhandler

}

 

loadGroovyPage.groovy:

TestBehavior('test google home page' , {

    loAd "http://www.google.com"

    driver.findElement(By.id("lst-ib")).sendKeys("Selenium!")

})

 

the TestBehavior method is defined in SeleniumCallHandler. Like:

 

    def TestBehavior(def name,Closure cls)

    {

        cls.delegate = this;

        cls();

    }

 

The above code in loadGroovypage works fine. But to make my DSL good, I tried this:

 

TestBehavior 'test google home page' , {

    loAd "http://www.google.com"

    driver.findElement(By.id("lst-ib")).sendKeys("Selenium!")

}

 

(same code without param's) And this code fails with message:

 

Error:(1, 13) Groovyc: unexpected token: test google home page on loadGroovyPage.groovy.

 

Where I'm making the mistake? Does the method call without params should work without any issues right?

Thanks,
Anto.