jQuery UI ダイアログ ボタンを click_button または selenium.click に応答させることができた人はいますか? これを機能させることができないようです。
基本的に、Cucumber/Webrat/Selenium を使用して、Rails アプリの jQuery UI ダイアログでフォームをテストしようとしています。
多くのテーブル行を含むページがあり、各行をクリックするとフォーム付きのダイアログ ボックスが表示されます。各フォーム要素には一意の ID があるため、マークアップは有効です。
ボタンは Dialog プラグインによって動的に作成できるため、ダイアログを初期化して「保存」ボタンと「キャンセル」ボタンを追加します。興味深いことに、プラグインは入力タグではなく、ボタン タグを挿入します。また、以下に示すように、開くときに id を追加して、テスト フレームワークがボタンをターゲットにできるようにします。
$('.inventory_dialog').dialog({
autoOpen: false,
modal: true,
buttons: {
'Save': function() {
// ajax submit stuff
},
Cancel: function() {
// cancel stuff
}
},
open: function() {
// add ids to buttons for selenium
var inventory_id = $(this).attr('id').split('_').pop();
$('.ui-dialog-buttonpane')
.find('button:contains("Save")').attr('id', 'inventory_'+inventory_id+'_save_button')
.end()
.find('button:contains("Cancel")').attr('id', 'inventory_'+inventory_id+'_cancel_button');
}
});
マークアップは次のようになります。
<div id="inventory_dialog_392827" class="inventory_dialog">
<form action="/suppliers/22/listings/27738/inventory/392827" class="edit_inventory" id="edit_inventory_392827" method="post"><div style="margin:0;padding:0"><input name="_method" type="hidden" value="put" /></div>
<div class="input_block">
<label for="inventory_392827_new_quantity">Quantity</label>
<input id="inventory_392827_new_quantity" name="inventory[new_quantity]" type="text" value="10" />
</div>
<div class="input_block">
<label for="inventory_392827_claim_quantities">Groups of</label>
<input id="inventory_392827_claim_quantities" name="inventory[claim_quantities]" type="text" value="6-8" />
</div>
</form>
</div>
私のCucumberステップ(現在)は次のようになります:
When /^I click the "(.+)" button in the inventory dialog$/ do |button_name|
debugger
selenium.click "//button[@id='inventory_#{@current_offer.id}_#{button_name.downcase}_button']"
selenium_wait
end
Cucumber を実行して「デバッガー」にヒットすると、入力フィールドで手動で「selenium.click」することができます。
selenium.click "//input[@id='inventory_392827_new_quantity']"
これにより、そのフィールドにカーソルが正常に配置されます。ただし、ボタンをクリックしても機能しません。
selenium.click "//button[@id='inventory_392827_save_button']"
コマンドラインデバッガーでそれを入力すると、nil が返されます (例外がないため、これは成功だと思います) が、Firefox は何もしません。ダイアログ ボックスはブラウザで開いたままになります。response.body を出力すると、そのボタンが表示されます。
私も試しました
click_button "inventory_392827_save_button"
しかし、「selenium_wait」コマンドはタイムアウトします。これは、その要素が表示されないことを意味します。
私は立ち往生しています...