Как передать аргументы определениям контента в Geb?

У меня есть страница (StartPage) со ссылками на несколько книг, и я хотел бы создать общий метод или определение содержимого, которое щелкает ссылку с определенным заголовком и переходит на эту страницу. Все страницы книги имеют static String TITLE, определяющий название книги. Я хочу сделать что-то вроде этого (StartPage):

def <T extends Page> T openBook(Class<T> pageType) {
    $(".product h3", text: pageType.TITLE).parents("a").click()
    browser.to(pageType)
    browser.page as T
}

Однако это не работает, поскольку, когда я перехожу к pageType (используя browser.to(pageType)), кажется, что Геб перенаправляет меня на страницу входа вместо запрошенного pageType (может быть, потому что, когда я вызываю to, сеанс сбрасывается?).

Если я реорганизую метод и жестко закодирую все в определение контента:

static content = {
    openMyBook(to: MyBookPage) { $(".product h3", text: "My Book Title").parents("a")}
}

он работает, просто вызывая openMyBook, но, как вы можете видеть, страница книги (MyBookPage) и text жестко закодированы.

Итак, мой вопрос в основном заключается в том, могу ли я передать аргументы определению контента (openMyBook) или изменить метод openBook для перехода на страницу книги без потери сеанса.


person Johan    schedule 07.11.2014    source источник


Ответы (1)


Вам нужно использовать browser.page(pageType) здесь вместо to(), потому что to() ведет браузер к URL-адресу переданного типа страницы. Вероятно, вы не указали поле static url = '...' для этих страниц, и по умолчанию используется корень вашего базового URL-адреса, поэтому вы повторно увидев, что браузер попадает на страницу входа в систему.

Было бы еще лучше, если бы вы использовали здесь browser.at(pageType), потому что тогда проверка at для страниц вашей книги будет проверена, а at() также установит страницу в браузере после успешной проверки.

person erdi    schedule 11.11.2014