在Web应用程序中,我使用jQueryUI模式对话框来确认操作:
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...
}
});
}
代码工作得很好,但我无法用Capybara成功测试它:
...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
Capybara找到按钮,但一切都好像回调从未被解雇过。
我尝试了不同的解决方法(我在stackoverflow上找到了几个):
没有用。还有其他想法吗?
答案 0 :(得分:1)
嗯,睡眠应该至少有效,但这是我用来确保我的AJAX调用已经返回的内容:
in_dialog.click_button 'Delete'
wait_until { page.evaluate_script("jQuery.active") == 0 }
page.should have_content 'Welcome'
答案 1 :(得分:1)
您在评论中发布了code that you use to interact with the server。
我在浏览器中手动执行了这些步骤,但单击“Supprimer”按钮返回409错误,没有其他任何操作。这就是为什么单击此按钮时测试中没有任何反应。
答案 2 :(得分:0)
你总是可以在capybara的场景中执行自定义的javascript代码。你尝试过类似的东西吗?
# when
page.execute_script("$('.the-button-selector').click();")
# then
page.should_not have_css(".the-dialog-selector")