Groovy могу ли я динамически выполнить строку как команду groovy? - PullRequest
2 голосов
/ 11 июля 2011

Я хотел бы динамически выполнить команду 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 ]

6 голосов
/ 12 июля 2011

Если у вас есть какой-то Groovy-код в строке, вы можете использовать класс Eval для его выполнения. Вот простой пример, который вы можете попробовать в консоли Groovy:

def code = "2 + 2"
assert Eval.me(code) == 4
0 голосов
/ 12 июля 2011

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 внутри вашегособственные сценарии и написать кусок кода, который читает БД и генерирует код, и он просто выдает код в файл, а затем выполняет новый файл в любое время.Этот файл может служить своего рода снимком того, что действительно было выполнено.

...