2012-10-21 23 views
1

在Web應用程序中,我使用jQueryUI的模式對話框來確認操作:如何模擬與水豚的jQuery-UI模式對話框按鈕的點擊?

function erase() { 
    $("#dialog").text("Are you sure want to delete this record?") 
    .attr("title", "Delete...") 
    .dialog({ 
    modal: true, 
    buttons: { 
     Delete: function() { 
     $.ajax({ 
      ...snip... 
      success: function() { 
      self.location = "."; // returns to the welcome page 
      } 
     }); 
     }, 
     ...snip... 
    } 
    }); 
} 

代碼工作得很好,但我不能與水豚測試它成功:

...snip... 
Capybara.default_driver = :webkit 
...snip... 

def in_dialog() 
    f = find('.ui-dialog') 
end 

feature 'Delete a record' do 
...snip... 
    scenario 'for any record' do 
    click_on 'Delete...' 
    page.should have_content 'Are you sure want to delete this record?' 
    in_dialog.click_button 'Delete' 
    page.should have_content 'Welcome' 
    ...snip... 
    end 
end 

水豚發現按鈕,但一切都好像回調從未被解僱。

我嘗試了不同的解決方法(其中有幾個我計算器上找到):

  • 睡眠,
  • 「等AJAX」
  • page.native.send_keys(:收益),而不是click_button 'Delete',
  • find('button',:text =>'Delete')。click代替click_button'Delete',
  • Selenium驅動代替webkit驅動。

無效。任何其他想法?

+0

你可以發表一個複製案例(如果它對於SO來說很大,那麼對於例如gist.github.com)? –

+1

以下是與我的測試服務器交互的水豚場景的要點:https://gist.github.com/4547091 –

+0

請準備包括相關HTML/JS文件的複製案例。如果我不知道如何重現問題,你如何指望我們告訴如何解決問題? –

回答

1

您發佈了code that you use to interact with the server的評論。

我在瀏覽器中手動執行了這些步驟,但點擊按鈕「Supprimer」返回409錯誤,沒有其他事情發生。這就是爲什麼當你點擊這個按鈕時你的測試沒有任何反應。

+0

我必須承認,水豚的情況與我手動測試的不完全一樣,前者因爲未報告的錯誤而失敗。看起來我對應用程序過於自信,而且在Capybara-jQueryUI集成方面還不夠。現在該錯誤已修復,該方案運行良好。謝謝您的幫助。 –

1

嗯,睡覺至少應該有工作,但這裏是我用什麼來確保我的AJAX調用返回:

in_dialog.click_button 'Delete' 
wait_until { page.evaluate_script("jQuery.active") == 0 } 
page.should have_content 'Welcome' 
+0

感謝您的建議。這似乎與我之前嘗試的類似,但我會再試一次。 –

+0

嗯,它沒有工作:( 有沒有人在jQueryUI水豚有任何成功? –

+2

'wait_until'已被棄用,它被從水豚2.0中刪除,你不應該使用它 – luacassus

0

你總是可以執行水豚的場景中自定義JavaScript代碼。你試過類似的東西:

# when 
page.execute_script("$('.the-button-selector').click();") 
# then 
page.should_not have_css(".the-dialog-selector")