Я хочу определить метод в классном классе, которому я могу передать 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.