Sha256: 2fb4215830d496446e6b22874eda8966dce263a9a5386b061bd4a8663d16ba76

Contents?: true

Size: 1.16 KB

Versions: 4

Compression:

Stored size: 1.16 KB

Contents

module TestCentricity
  class FileField < UIElement
    def initialize(parent, locator, context)
      @parent  = parent
      @locator = locator
      @context = context
      @type    = :filefield
      @alt_locator = nil
    end

    def attach_file(file_path)
      Capybara.ignore_hidden_elements = false
      page.attach_file(@locator, file_path)
      Capybara.ignore_hidden_elements = true
    end

    def drop_files(files)
      js_script = "fileList = Array();"
      files.count.times do |i|
        # generate a fake input selector
        page.execute_script("if ($('#seleniumUpload#{i}').length == 0) { seleniumUpload#{i} = window.$('<input/>').attr({id: 'seleniumUpload#{i}', type:'file'}).appendTo('body'); }")
        # attach file to the fake input selector through Capybara
        attach_file("seleniumUpload#{i}", files[i])
        # create the fake js event
        js_script = "#{js_script} fileList.push(seleniumUpload#{i}.get(0).files[0]);"
      end
      # trigger the fake drop event
      page.execute_script("#{js_script} e = $.Event('drop'); e.originalEvent = {dataTransfer : { files : fileList } }; $('##{@locator}').trigger(e);")
    end
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
testcentricity_web-1.0.9 lib/testcentricity_web/elements/file_field.rb
testcentricity_web-1.0.8 lib/testcentricity_web/elements/file_field.rb
testcentricity_web-1.0.7 lib/testcentricity_web/elements/file_field.rb
testcentricity_web-1.0.6 lib/testcentricity_web/elements/file_field.rb