2015-06-09 1 views
0

Geb использует статическое поле content для определения содержимого страницы или модуля. Значение поля content является замыканием.Добавить методы в назначенное закрытие с помощью GroovyDSL


class GebishOrgHomePage extends Page { 
    static content = { 
     manualsMenu { 
      module MenuModule, $("#header-content ul li", 0) 
     } 
     links { $('.link-list li a') } 
    } 
} 

Intellij уже есть поддержка этого контента DSL, однако он не поддерживает module и moduleList методы. Это приводит к ограниченной автозаполненной поддержке при работе с модулями.

Чтобы исправить это, я хотел бы написать сценарий GroovyDSL, который добавляет недостающие определения методов к закрытию содержимого и его вложенным закрытиям. Однако я не знаю, как добавлять методы к закрытию, которое не передается методу, так как для enclosingCall требуется конкретное имя метода.

И другое дело, что эти методы должны иметь общий тип возвращаемого значения, как это:


<T extends Module> T module(Class<T> m) { 
    // return an instance of T 
} 

ответ

1

Если вы используете latest snapshot то module() вызовов будут понятны вашей IDE. Это до moving module() to Navigator именно за то, что вы после - автозаполнение и сильная типизация.

Посмотрите на текущую версию section 6.4 Книги Геб. moduleList() будет выпущен в следующем выпуске, и в этом разделе объясняется, что использовать. Метод module(), принимающий аргумент карты для инициализации свойств модуля, также будет идти, вы теперь инициализируете сам модуль и передаете экземпляр в module(), и есть пример этого в 6.4. Благодаря тому, что вы получите автозаполнение об ошибках модулей и использовании в IntelliJ.

+0

Благодарим за информацию, но есть некоторые недогрузки –

+0

, например. ' T module (параметры карты, класс moduleClass, база Navigator)' –

+0

Я объяснил, что случилось с перегрузками и что использовать вместо этого в моем ответе. – erdi

Смежные вопросы