Groovy 在Geb中动态设置页面url

Groovy 在Geb中动态设置页面url,groovy,automation,geb,Groovy,Automation,Geb,在这个场景中,我想从主页导航到子页并执行一些操作。子页面的url是动态生成的,但页面内容是相同的。这就是我迄今为止所尝试的: 在主要类别中: to MainPage SubPageButton.click() to SubPage SelectAddressButton.click() 在Page类中: public class SubPage extends Page { static url = getCurrentUrl() static cont

在这个场景中,我想从主页导航到子页并执行一些操作。子页面的url是动态生成的,但页面内容是相同的。这就是我迄今为止所尝试的:

在主要类别中:

to MainPage
    SubPageButton.click()
    to SubPage
    SelectAddressButton.click()
在Page类中:

public class SubPage extends Page {
    static url = getCurrentUrl()
    static content = {
        SelectAddressButton { $("button", 0) }
    }
}
我也尝试过(没有成功)

  • 定义子页面的静态内容(SelectAddressButton) 在主页的页面对象中
  • 定义不带url的子页面

  • 提前多谢

    它将不起作用,因为加载类时会初始化静态字段

    但是,您可以使用
    go“http://my_dynamic_url_string“
    在您的规范中,然后进行断言。在这里,
    at
    断言也会起作用

    此外,如果你的“动态”url可以参数化,你应该看看

    定义一个没有
    url
    静态字段的
    页面
    。我经常用它。目前,我使用的是Geb'0.10.0',并通过
    withNewWindow{link.click(CustomPage)}
    使用它,它在处为我进行静态
    验证。或者,您可以将逻辑放入方法中,并在传递给
    withNewWindow
    的闭包中调用它们

    例如(未经测试):


    重写
    Page
    类中的方法
    getPageUrl


    浏览源代码规范,第页。注意如何调用getPageUrl。

    谢谢!在哪里可以定义子页面的静态内容?我曾尝试在主页中定义,但它不起作用。定义没有url的页面也不起作用,尽管示例中使用了该方法。@dshgna更新了答案。我认为您使用不带url的页面是失败的,因为您试图使用
    导航到
    。当您执行
    操作时,单击
    可以提供预期的页面。见下面的例子。谢谢。这就是我错的地方。与使用“to”不同,您在回答中提到的at检查是有效的。
    
    class CustomPage {
      static content = {
          SelectAddressButton { $("button", 0) }
      }
    
      static at = { "check smth" }
    
      def orSomehowLikeThis() {
        assert "smth"
        SelectAddressButton.click() // accessing content
      }
    }
    
    withNewWindow { link.click(CustomPage) } {
      orSomehowLikeThis()
    }