2016-10-17 5 views
0

私はdropzone capybaraテストを複数回呼び出そうとしています。しかし、私がそれをもう一度呼び出すと、IDはすでに使用されています。私は複数回実行できるようにIDをランダム化しようとしています。リファクタリングcapybara javascript dropzoneテスト

def drop_in_dropzone(file_path) 
    page.execute_script <<-JS 
    fakeFileInput = window.$('<input/>').attr(
     {id: 'fakeFileInput', type:'file'} 
    ).appendTo('body'); 
    JS 
    attach_file("fakeFileInput", file_path) 
    page.execute_script("var fileList = [fakeFileInput.get(0).files[0]]") 
    page.execute_script <<-JS 
    var e = jQuery.Event('drop', { dataTransfer : { files : [fakeFileInput.get(0).files[0]] } }); 
    $('.dropzone')[0].dropzone.listeners[0].events.drop(e); 
    JS 
end 

2回目の呼び出し時にエラーが発生しました。

Failure/Error: attach_file("fakeFileInput", file_path) 

Capybara::Ambiguous: 
Ambiguous match, found 2 elements matching file field "fakeFileInput" 

答えて

0

あなたは間違いなく、単に入力のためのランダムなID番号を生成することができますが、まだ存在していない場合だけだけfakeFileInputにそれを作成する方が簡単かもしれません。これは、この方法以外の目的で入力を使用しない場合にのみ機能しますが、そのように思えます。

page.execute_script <<-JS 
    fakeFileInput = fakeFileInput || window.$('<input/>').attr(
    {id: '#{fake_input_id}', type:'file'} 
).appendTo('body'); 
JS 

すでに存在していた場合は、再度作成されずに再利用されます。

関連する問題