Как загрузить файл с помощью watir и Internet Explorer? - PullRequest
0 голосов
/ 15 ноября 2011

За последние пару дней мне было поручено автоматизировать некоторые аспекты систем CMS моей компании.(Мы используем Drupal)

Одна из проблем, с которой я сталкиваюсь с моим скриптом ruby, заключается в том, чтобы IE выбрал локальный файл на моей машине и добавил его в форму отправки.

Теперь я читал об этом и нашел несколько симулятивных постов, но отличие от формы, которую мы используем, состоит в том, что кнопка обзора сделана из флэш-памяти, и нет поля ввода для пути к файлу,У меня есть варианты: либо ввести «Имя файла» и щелкнуть по кнопке «Открыть», либо второй вариант - дважды щелкнуть файл.

Таким образом, до сих пор я решил, что этоПерейдите на вкладку «Кнопка браузера», а затем нажмите клавишу «Ввод», чтобы открыть меню просмотра. Но теперь мне нужна возможность выбрать имя файла.

Это мой файл Ruby.

require 'watir'
include Watir

ie = Watir::IE.new
ie.goto ("file:///C:/Ruby193/bin/ruby-capybara/features/step_definitions/form.html")

ie.text_field(:id, "edit-submitted-ugc-video-title").set("Title")
ie.text_field(:id, "edit-submitted-ugc-video-firstname").set("First Name")
ie.text_field(:id, "edit-submitted-ugc-video-lastname").set("Last Name")
ie.text_field(:id, "edit-submitted-ugc-video-phonenumber").set("01234567891")
ie.text_field(:id, "edit-submitted-ugc-video-location").set("London")
ie.text_field(:id, "edit-submitted-ugc-video-email").set("test@test.com")
ie.text_field(:id, "edit-submitted-ugc-video-email2").set("test@test.com")
ie.send_keys('{TAB}')
ie.send_keys('{ENTER}')

uploadfile = "V:\GIR-FP-WSD-QA\Test Media Files\Video1.mp4"
assert_equal uploadfile, ie.file_field(:name,"Video1.mp4").value    
ie.button(:name, 'upload').click
#

Отредактировано:

требуют 'watir' требуют 'win32ole'

включают Watir

ie = Watir::IE.new
ie.goto ("file:///C:/Ruby193/bin/ruby-capybara/features/step_definitions/form.html")

ie.text_field(:id, "edit-submitted-ugc-video-title").set("Title")
ie.text_field(:id, "edit-submitted-ugc-video-firstname").set("First Name")
ie.text_field(:id, "edit-submitted-ugc-video-lastname").set("Last Name")
ie.text_field(:id, "edit-submitted-ugc-video-phonenumber").set("01234567891")
ie.text_field(:id, "edit-submitted-ugc-video-location").set("London")
ie.text_field(:id, "edit-submitted-ugc-video-email").set("test@test.com")
ie.text_field(:id, "edit-submitted-ugc-video-email2").set("test@test.com")
ie.send_keys('{TAB}')
ie.send_keys('{ENTER}')

class FileField < InputElement

# set the file location in the Choose file dialog in a new process
# will raise a Watir Exception if AutoIt is not correctly installed
def set(setPath)
assert_exists
require 'watir/windowhelper'
WindowHelper.check_autoit_installed
begin
    thrd = Thread.new do
    system("rubyw -e \"require 'win32ole'; @autoit=WIN32OLE.new('AutoItX3.Control');
    waitresult=@autoit.WinWait 'Bird annoys Cat.mp4', '', 15; sleep 1; if waitresult == 1\" -e 
    \"@autoit.ControlSetText 'Bird annoys Cat.mp4', '', 'Edit1', '#{setPath}'; 
    @autoit.ControlSend 'Bird annoys Cat.mp4', '', 'Button2', '{ENTER}';\" -e \"end\"")
end
    thrd.join(1)
rescue
    raise Watir::Exception::WatirException, "Problem accessing Choose file dialog"
end
click
$end

ie.button(:name, 'upload').click

Ответы [ 3 ]

0 голосов
/ 16 ноября 2011

Автоматизация вещей, выполняемых во флэш-памяти, иногда является довольно большой болью из-за того, насколько это запатентовано.Возможно, вы захотите изучить использование метода автоматизации на основе изображений для этого раздела теста.См. это сообщение в блоге для получения дополнительной информации

0 голосов
/ 16 ноября 2011

Является ли диалоговое окно выбора файлов родным диалогом открытия файлов Windows или это также проприетарное решение для флэш-памяти?

Если это собственный диалог (например, такой же, как и везде), вы можете использовать мою библиотеку RAutomation или autoit, как предложено выше.

Если это так, то вы можете взять несколько советов, как это сделать, из Код Watir .

Кроме того, есть ли у этой флэш-загрузки JavaScript API? Если это так, то вы можете использовать #execute_script, чтобы делать все, что вам нужно - например, установить файл программно и двигаться дальше. Я делаю что-то похожее с флеш-видеоплеером.

0 голосов
/ 15 ноября 2011

Боюсь, что в этой ситуации вам придется использовать автоматизацию Windows. Это может быть либо winapi, либо какая-то инфраструктура автоматизации, например autoit :

  class FileField < InputElement

# set the file location in the Choose file dialog in a new process
# will raise a Watir Exception if AutoIt is not correctly installed
def set(setPath)
  assert_exists
  require 'watir/windowhelper'
  WindowHelper.check_autoit_installed
  begin
    thrd = Thread.new do
      system("rubyw -e \"require 'win32ole'; @autoit=WIN32OLE.new('AutoItX3.Control');
      waitresult=@autoit.WinWait 'Choose file', '', 15; sleep 1; if waitresult == 1\" -e 
      \"@autoit.ControlSetText 'Choose file', '', 'Edit1', '#{setPath}'; 
      @autoit.ControlSend 'Choose file', '', 'Button2', '{ENTER}';\" -e \"end\"")
    end
  thrd.join(1)
  rescue
    raise Watir::Exception::WatirException, "Problem accessing Choose file dialog"
  end
  click
end

конец

...