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

law*_*iet 3 database groovy dynamic geb

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

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

例如:

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

   $("form", name: "password").value("Test")
}
Run Code Online (Sandbox Code Playgroud)

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

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

Dón*_*nal 9

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

def code = "2 + 2"
assert Eval.me(code) == 4
Run Code Online (Sandbox Code Playgroud)


Joh*_*ugh 2

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

反正...

GroovyShell将允许您评估作为代码构建的任何字符串,因此您可以编写代码从数据库构建一个大字符串,然后将其传递给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")
    }
""")
Run Code Online (Sandbox Code Playgroud)

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