2013-12-19 63 views
3

我對整個Selenium/Geb有點新東西,所以我可能會對此有點錯誤,但我試圖讓exists()方法在下面的代碼中正常工作。如何檢查Geb模塊「內容」是否存在?

class Question extends Module { 
    static base = { $("fieldset") } 
    static content = { 
     input { $("input[type=text]") } 
     name { input.getAttribute("name").toString() } 
    } 
    boolean exists() { 
     return input.isPresent() 
    } 

無奈的是,當我嘗試執行代碼(從斯波克測試,「走出去」荷蘭國際集團的PageObjectm包括這個模塊,我得到如下:

所要求的網頁內容「輸入 - SimplePageContent(所有者:質詢 - 問題(所有者:我的頁面,ARGS:[],值:空),ARGS:[],值:空)」不存在

我已經嘗試了許多其它東西包括:

  • if (input) return true; return false
  • ... input.size() == 0
  • 使用static at = {...}(似乎並不爲模塊」

任何想法

回答

9

默認情況下蓋布可以確保您的內容定義返回非空支持元素。如果您的內容是可選的,你可以使用required content option告訴它:

name(required: false) { input.getAttribute("name").toString() } 

因爲蓋布使用Groovy的真相重新定義如何導航被強制爲布爾值(空導航儀是falsey和非空的truthy)可以簡化您的exists方法爲:

boolean exists() { 
    input 
} 
+0

感謝您的迴應。我會再給它,但不知道爲什麼你的答案會不同於我的if(input)返回true;返回false,'(而不是代碼*實際*看起來如何)嘗試。我會盡快再試一次。 –

+0

'exists()'的實現實際上只是一個表面上的改變,但是你需要在內容定義中設置'required'爲false,這樣你就不會得到關於丟失所需內容的異常。 – erdi

+0

嗯......也許。今天仍然沒有機會再次修改它,但是我*知道(並且應該聲明)在執行'exists()'方法的行上發生了異常 –

相關問題