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を使用すると、コードとして作成した文字列を評価できるため、データベースから1つの大きな文字列を作成するコードを記述し、それをに渡して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 に答える