2011-06-07 39 views
8

在這裏有一些幫助後,我正在使用Geb編寫一個功能性Web測試,並且要測試已禁用表單提交按鈕的屬性值發生了一個事件,流程如下:如何使用Geb來檢查頁面事件後的元素屬性值

  1. 加載頁面,提交按鈕在頁面源中被聲明爲禁用,所以應該禁用例如<input type="submit" class="submit" disabled="true"/>
  2. 檢查頁面上的複選框,這將導致一段jQuery代碼執行,這將啓用已禁用的提交按鈕編程方式使用:$('input.submit').attr('disabled', false);

我第一次嘗試是使用斷言$('input.submit')[email protected] == 'true',這似乎爲頁面加載之後的初始檢查工作,但是在執行我的JQuery代碼以啓用按鈕後,後續檢查仍會返回相同的結果。這使我想知道這種檢查是否只能在頁面加載時報告該值,並且沒有看到任何後續的程序變更?

然後我發現了Geb的jquery迭代,我希望我可以用它來返回提交按鈕的值,並對此進行斷言。 $('input.submit').jquery.attr('disabled') == false但是,Geb文檔確認所有對.jquery屬性的調用都會返回Geb Navigator實例,所以我不認爲我可以返回我想要的信息。

我也懷疑JQuery代碼實際上是否在切換提交按鈕禁用狀態,我已經使用Firebug進行了廣泛的測試,並且可以確認這在瀏覽器中完美工作,所以我懷疑這是我的問題對Geb的理解還是對Geb本身的限制?

它讓我覺得在頁面上執行一些操作後檢查元素屬性的值可能是一個常見的用例,因此我更希望我已經錯過了一些簡單的做法。將非常感謝任何指針,以幫助我得到這種排序。

乾杯,

埃德

回答

3

轉播我的創業板郵件列表上一篇:

後執行jQuery代碼,使該按鈕時,是有可能,要檢查前的結果代碼實際上啓用了按鈕?例如,正在做類似:

waitFor { $("input.submit")[email protected] == "false" } 
10

已經做了更多的測試,現在已經取得了令人滿意的結果。我是做了幾件事情,我相信現在是inproper,即試圖設置disabled屬性值的真假非法值是這樣的:

$('input.submit').attr('disabled', true); 
$('input.submit').attr('disabled', false); 

望着HTML forms specification殘疾人屬性顯示不採取一個值,而不是單獨存在表示一個元素被禁用。修改我的代碼兌現這一點,並刪除指示元素的啓用屬性似乎做的伎倆:

$('input.submit').attr('disabled', true); 
//This time we remove the disabled attribute rather than setting it to false. 
$('input.submit').removeAttr('disabled'); 

注:我的殘疾值仍設置爲true因爲我不能確定如何設置屬性而不設置值,請參閱this SO post瞭解更多詳情。

使用上面的我現在可以用蓋布斷言這樣的元素的有效/無效狀態:

//Check that something is disabled. 
[email protected] == 'true' 

//Check that something is enabled. 
[email protected] == 'false' 

注:蓋布似乎需要一個字符串表示的預期狀態,而不是一個布爾,這導致我的斷言失敗。

所以就是這樣 - 現在所有的工作都很好,我正在編寫大量的Geb測試!希望這個解釋對其他人有用。

相關問題