如何将参数传递给Geb中的内容定义?

时间:2014-11-07 07:12:50

标签: testing groovy 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))时,似乎Geb将我重定向到登录页面而不是请求的pageType(可能是因为当我打电话给to会话重置?)。

如果我重构该方法并将所有内容硬编码到内容定义中:

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

只需拨打openMyBook即可,但您可以看到书页(MyBookPage)和text是硬编码的。

所以我的问题基本上是我可以将参数传递给内容定义(openMyBook)或修改openBook方法以导航到书页而不会丢失会话。

1 个答案:

答案 0 :(得分:2)

您需要在此使用browser.page(pageType)而不是to(),因为to()会将浏览器驱动到传入的网页类型的网址。您可能没有指定static url = '...'这些页面的字段,默认是您的基本网址的根,这就是您看到浏览器在登录页面结束的原因。

如果您在此使用browser.at(pageType)会更好,因为您的图书页面的核查人员将会经过验证,at()也会在成功验证后在浏览器上设置页面。