2015-08-28 80 views
2

在這種情況下,我想從主頁面導航到子頁面並執行一些操作。子頁面的URL是動態生成的,但頁面內容是相同的。這是我到目前爲止已經試過:在Geb中動態設置頁面URL

在主類:

to MainPage 
    SubPageButton.click() 
    to SubPage 
    SelectAddressButton.click() 

在頁面類:

public class SubPage extends Page { 
    static url = getCurrentUrl() 
    static content = { 
     SelectAddressButton { $("button", 0) } 
    } 
} 

我已經或者嘗試(沒有成功)

  1. 定義主頁面的頁面對象中子頁面(SelectAddressButton) 的靜態內容。
  2. 定義子頁面沒有網址的

非常感謝提前!

+2

我認爲你的網頁沒有網址,因爲你試着用'to'來瀏覽它。當你點擊''你可以提供預期的頁面。見下面的例子。 – Seagull

+0

謝謝。那是我出錯的地方。而不是使用'來',如你在答案中提到的那樣做檢查工作。 – dshgna

回答

3

它不起作用,因爲靜態字段在加載類時被初始化。

但是,您可以在規範中使用go "http://my_dynamic_url_string",然後進行斷言。 at斷言也可以在這裏工作。

此外,如果您的「動態」url可以被參數化,你應該看看Advanced Page Navigation

定義一個Page沒有url靜態字段應該工作。我用了很多。目前我使用Geb'0.10.0'並通過withNewWindow { link.click(CustomPage) }使用它,它爲我執行靜態at驗證。或者你可以把邏輯放在方法中,並在關閉時調用它們,傳遞給withNewWindow

例如(未測試):

class CustomPage { 
    static content = { 
     SelectAddressButton { $("button", 0) } 
    } 

    static at = { "check smth" } 

    def orSomehowLikeThis() { 
    assert "smth" 
    SelectAddressButton.click() // accessing content 
    } 
} 

withNewWindow { link.click(CustomPage) } { 
    orSomehowLikeThis() 
} 
+0

謝謝!我在哪裏可以定義子頁面的靜態內容?我試圖在主頁面中定義,但它不起作用。雖然在示例中使用了該方法,但在沒有url的情況下定義頁面不起作用。 – dshgna

+0

@dshgna更新了答案。 – Seagull

0

覆蓋在Page類中的方法getPageUrl

瀏覽源代碼Spec,Page。注意如何調用getPageUrl。