【问题标题】:refactor capybara javascript dropzone test重构 capybara javascript dropzone 测试
【发布时间】:2016-10-17 01:34:13
【问题描述】:

我正在尝试多次调用 dropzone capybara 测试。但是,当我第二次调用它时,该 ID 已被使用。我正在尝试随机化 ID,以便它可以运行多次。

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

第二次调用时出错。

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

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

【问题讨论】:

    标签: javascript ruby-on-rails rspec capybara


    【解决方案1】:

    您绝对可以只为输入生成一个随机的 id 号,但如果不存在的话,只创建 fakeFileInput 可能会更容易。仅当您不将输入用于此方法以外的任何其他目的时,这才有效,但您似乎正在这样做。

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

    如果它已经存在,它将不会被再次创建,只会被重复使用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-04-04
      • 2011-10-08
      • 1970-01-01
      • 2011-12-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多