Groovy可以动态执行字符串作为groovy命令吗?

时间:2011-07-11 19:39:12

标签: database groovy dynamic geb

我想从我的数据库中动态执行groovy语句。

我目前正在使用geb(www.gebish.org)自动化我的浏览器,我想从我的数据库中使用“css选择器”。

例如:

Browser.drive {
   go "www.test.com"

   $("form", name: "password").value("Test")
}

在这个例子中,我想将“$(”form“,name:”password“)。value(”Test“)”完全移动到数据库,并在我的代码中动态调用它。在这样的事情可能吗?

我是Groovy和Java的新手,也许我在推理方面有错误,对于这样的问题有一个更简单的解决方案......请帮助我:))

2 个答案:

答案 0 :(得分:6)

如果String中有一些Groovy代码,可以使用Eval类来执行它。这是一个可以在Groovy控制台中试用的简单示例:

def code = "2 + 2"
assert Eval.me(code) == 4

答案 1 :(得分:0)

Groovy可以简洁而富有表现力,因此您可以快速跳转到脚本中进行读取或进行更改,这意味着您可以将代码放入脚本而不是数据库 - 这就是您经常使用的原因查看在代码而不是属性或数据库中完成的配置。

总之...

GroovyShell将允许您评估您构建为代码的任何String,因此您可以编写代码以从数据库构建一个大字符串,然后将其传递给GroovyShell.evaluate(String)以执行它。

以下是一个示例:

#!/usr/bin/env groovy
new GroovyShell().evaluate("""
    @Grapes([
        @Grab("org.codehaus.geb:geb-core:0.6.0"),
        @Grab("org.seleniumhq.selenium:selenium-htmlunit-driver:2.0rc3")
    ])
    import geb.Browser

    Browser.drive {
        go "http://www.test.com/"
        $("form", name: "password").value("Test")
    }
""")

更简单地说,您可以跳过在自己的脚本中使用GroovyShell并编写读取数据库并生成代码的代码,并将代码转储到文件中,然后随时执行新文件。该文件可以作为真实执行内容的快照。