2

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

カピバラはボタンを見つけますが、コールバックが起動されなかったかのようにすべてが進みます。

さまざまな回避策を試しました(そのうちのいくつかはstackoverflowで見つけました):

  • 寝る、
  • "ajax を待つ",
  • page.native.send_keys(:return) click_button '削除' の代わりに、
  • find('button', :text => 'Delete').click 代わりに click_button 'Delete',
  • Webkit ドライバーの代わりに Selenium ドライバー。

どれも機能しませんでした。他のアイデアはありますか?

4

3 に答える 3

1

うーん、スリープは少なくとも機能するはずですが、AJAX 呼び出しが返されたことを確認するために使用するものは次のとおりです。

in_dialog.click_button 'Delete'
wait_until { page.evaluate_script("jQuery.active") == 0 }
page.should have_content 'Welcome'
于 2012-11-05T20:05:09.063 に答える
1

サーバーとの対話に使用するコードをコメントに投稿しました。

これらの手順をブラウザで手動で実行しましたが、「Supprimer」ボタンをクリックすると 409 エラーが返され、他に何も起こりません。このボタンをクリックしても、テストで何も起こらないのはそのためです。

于 2013-01-17T07:48:01.863 に答える
0

カピバラのシナリオ内でいつでもカスタム JavaScript コードを実行できます。次のようなことを試しましたか:

# when
page.execute_script("$('.the-button-selector').click();")
# then
page.should_not have_css(".the-dialog-selector")
于 2013-01-14T11:23:59.603 に答える