4

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

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

例如:

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

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

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

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

4

2 回答 2

13

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

def code = "2 + 2"
assert Eval.me(code) == 4
于 2011-07-12T08:30:38.193 回答
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")
    }
""")

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

于 2011-07-12T03:02:17.543 回答