#javascript #ruby-on-rails #rspec #capybara
#javascript #ruby-on-rails #rspec #capybara
Вопрос:
Я пытаюсь вызвать тест dropzone capybara несколько раз. Однако, когда я вызываю его во второй раз, идентификатор уже был использован. Я пытаюсь рандомизировать идентификатор, чтобы он мог выполняться несколько раз.
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"
Ответ №1:
Вы определенно можете просто сгенерировать случайный идентификационный номер для ввода, но, возможно, было бы проще просто создать fakeFileInput, если он еще не существует. Это будет работать только в том случае, если вы не используете входные данные для каких-либо других целей, кроме как в этом методе, но, похоже, это то, что вы делаете.
page.execute_script <<-JS
fakeFileInput = fakeFileInput || window.$('<input/>').attr(
{id: '#{fake_input_id}', type:'file'}
).appendTo('body');
JS
Если бы он уже существовал, он не создавался бы снова, а просто использовался бы повторно.