我有一个页面(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)
)时,似乎Geb将我重定向到登录页面而不是请求的pageType
(可能是因为当我打电话给to
会话重置?)。
如果我重构该方法并将所有内容硬编码到内容定义中:
static content = {
openMyBook(to: MyBookPage) { $(".product h3", text: "My Book Title").parents("a")}
}
只需拨打openMyBook
即可,但您可以看到书页(MyBookPage
)和text
是硬编码的。
所以我的问题基本上是我可以将参数传递给内容定义(openMyBook
)或修改openBook
方法以导航到书页而不会丢失会话。
答案 0 :(得分:2)
您需要在此使用browser.page(pageType)
而不是to()
,因为to()
会将浏览器驱动到传入的网页类型的网址。您可能没有指定static url = '...'
这些页面的字段,默认是您的基本网址的根,这就是您看到浏览器在登录页面结束的原因。
如果您在此使用browser.at(pageType)
会更好,因为您的图书页面的核查人员将会经过验证,at()
也会在成功验证后在浏览器上设置页面。