0
當遵循geb頁面對象模式時,我們鼓勵創建一個靜態值的值塊,它代表您試圖連接的頁面上的元素。創建一個檢查器也是很好的。這裏是一個例子:對於Geb頁面對象,何時初始化靜態內容塊?
class SomePage extends Page{
static at = {$(By.xpath("some header or something")).displayed}
static content = {
element1 {$(By.xpath("some xpath1"))}
element2 {$(By.xpath("some xpath2"))}
//so on and so forth
}
}
現在我想我已經知道這個問題的答案,但找不到文檔來備份它。我很確定,一旦從測試腳本調用「at checker」,就會初始化靜態內容塊,但我不確定。如果我的建議是真的,那麼這將意味着這樣的事情:
class SomePage extends Page{
static at = {$(By.xpath("some header or something")).displayed}
def someString
static content = {
element1 {$(By.xpath("//*[contains(text(), ${someString}"))}
element2 {$(By.xpath("some xpath2"))}
//so on and so forth
}
def setSomeString(String x){
this.someString = x
}
}
將是不切實際的權利,或者甚至不可能?這是因爲要調用「setSomeString」,您需要調用at檢查器來告訴腳本要爲方法和變量調用引用哪個類,但是如果調用at檢查器,則意味着靜態內容將被初始化。此外,如果網頁的內容在初次到達網頁時沒有顯示出來,那麼您將無法將該內容放入靜態內容塊中,因爲檢查器應儘快調用當你到達上述網頁時。
我只是想確認或否認這是geb頁面對象的行爲。考慮到上述情況,我會很樂意聽到描述最佳實踐的答案。
如果還有一種方法可以重新初始化內容,我也想知道,但我認爲沒有。
這麼回答我的問題完全是,如果定義somePage.element1的XPath是由另一個字符串變量定義'element1 {$(By.xpath(「// * [contains(text(),$ {someString}」))}' 並且該變量會在您有「//多行代碼...」時發生變化,那麼element1在最後一行用someString變量的新值重新定義?根據你的回答,我不確定你是否完全理解了這個問題 – switch201
我完全理解了這個問題,是的,元素1「得到了重新定義」在那裏面(即使說它重新定義是一種簡化,因爲它的定義從來沒有「固定」,正如我在我的迴應中提到的那樣)。 – erdi
我測試過了,你是正確的謝謝 – switch201