Динамическая настройка контента в Geb

Я хочу определить метод в классном классе, которому я могу передать xpath на лету (чтобы один и тот же метод можно было повторно использовать в зависимости от приложения). Фрагмент кода ниже — это просто доказательство концепции, однако в конечном итоге я хотел бы создать библиотеку повторно используемых команд/компонентов, поэтому я хотел бы научиться динамически определять содержимое страницы.

Если я попробую это:

import geb.Page;


class oneStepDefMethodClass extends Page {
static url = 'http://www.google.com'
static content = {
    queryInput { $("input", id: "gbqfq") }   
    queryButton { $("button",name: "btnG") } 
    //songLink { $("span._BZ")} 
}
....
void assertSongInResults2(String xpathOfSongLink){
    println "Waiting on video link "+ xpathOfSongLink

     songLink { $(xpathOfSongLink)}

    waitFor {
        songLink.displayed
    }
}

}

Я получаю эту ошибку: groovy.lang.MissingMethodException: нет подписи метода: geb.navigator.NonEmptyNavigator.songLink() применим для типов аргументов: (oneStepDefMethodClass$_assertSongInResults2_closure3) значения: [oneStepDefMethodClass$_assertSongInResults2_closure3@7c455e96]

Если я брошу

content={songLink {$(xpathOfSongLink)}
}

блок в методе assertSongInResults2, я получаю эту ошибку: geb.error.UnresolvablePropertyException: невозможно разрешить songLink как содержимое для oneStepDefMethodClass или как свойство в его контексте Navigator. SongLink — это класс, который вы забыли импортировать?

Итак, да, есть ли способ динамически определять содержимое страницы таким образом? Программа выполняется нормально, если я определяю ее статически поверх остального содержимого, но это не главное, я хочу создавать повторно используемые ресурсы, а не переопределять колесо каждый раз, когда я хочу использовать geb.


person George Akritas    schedule 25.08.2014    source источник


Ответы (1)


Решено, когда я писал вопрос, но решил опубликовать на случай, если у кого-то еще возникнет аналогичная проблема.

static String someXpath

static content = {
    queryInput { $("input", id: "gbqfq") } //  
    queryButton { $("button",name: "btnG") } //
    songLink { $(someXpath) } //syntax element.className

}
....
    void assertSongInResults2(String xpathOfSongLink){
    println "Waiting on video link "+ xpathOfSongLink
    someXpath=xpathOfSongLink
    waitFor {
        songLink.displayed
    }
}
person George Akritas    schedule 25.08.2014
comment
Спасибо, что поделились ответом! Через 48 часов вы даже можете принять свой ответ, чтобы вопрос больше не появлялся. во вкладке без ответов. - person Mathias Müller; 26.08.2014