Как загрузить файл с водой и IE?

Я пишу водный сценарий для тестирования формы загрузки.

Но сценарий автоматически не выбирает файл, который должен быть загружен от моего жесткого диска.

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

Это - мой водный сценарий:

require 'test/unit'
require 'watir'

# runs on win3k, IE 6.0.3790; ruby 1.8.6, watir 

class EpcHomePage < Test::Unit::TestCase

  def test_upload
    ie = @browser
    htmlfile = "C:\\testing\\upload.html"
    uploadfile = "C:\\testing\\upload.html"
    ie.goto(htmlfile)
    ie.file_field(:name,"file1").set(uploadfile)
    assert_equal uploadfile, ie.file_field(:name,"file1").value
    ie.button(:name, 'upload').click
   end

  def setup
    @browser = Watir::IE.new
  end

  def teardown
    @browser.close
  end
end

Я получил код от этой страницы: http://wiki.openqa.org/display/WTR/File+Uploads

Это - форма:


  

Я нашел этот ручной http://svn.openqa.org/svn/watir/trunk/watir/unittests/filefield_test.rb также. Я использую IE 6 и также IE 7for тестирование.

Править: Я загрузил свой простой пример здесь (3 файла, которые живут в c:\testing\ на моих машинах, только запускают командный файл):

http://dl.dropbox.com/u/1508092/testing.rar

Это перестало работать на 3 различных машинах (все окна 2003, 2x IE 6 и 1 x IE 7). Я также изменил время сна в сценарии c:\ruby\lib\ruby\gems\1.8\gems\watir-1.6.5\lib\watir\input_elements.rb с 1 секунды до 5 секунд, как предложенный Željko Filipin в его ответе:

    def set(path_to_file)
      assert_exists
      require 'watir/windowhelper'
      WindowHelper.check_autoit_installed
      begin
        Thread.new do
          sleep 5 # it takes some time for popup to appear
          system %{ruby -e '
          ...

Это - то, где это останавливается (обратите внимание на то, что, я действительно вручную перешел к каталогу в диалоговом окне файла однажды. От той точки на IE всегда показывает открытое диалоговое окно с этим каталогом, но который не означает, что сценарий выбрал каталог. Я думаю, что это означает, что IE всегда показывает последний каталог, где это уехало):

это - то, где это останавливает http://dl.dropbox.com/u/1508092/upload-dialog.JPG

Править:

Я нашел, что это код ole32 ищет английский заголовок:

POPUP_TITLES = ['Выбирают файл', 'Выбирают Файл для Загрузки']

Я установил английскую версию IE 7 теперь. Все еще никакой успех. Но я думаю, что это имеет некоторое отношение к локализации, потому что input_elements.rb ищет заголовки окон. Интересно, почему это все еще перестало работать теперь. Это - код от input_elements.rb:

  class FileField < InputElement
    INPUT_TYPES = ["file"]
    POPUP_TITLES = ['Choose file', 'Choose File to Upload']

    # 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(path_to_file)
      assert_exists
      require 'watir/windowhelper'
      WindowHelper.check_autoit_installed
      begin
        Thread.new do
          sleep 2 # it takes some time for popup to appear
          system %{ruby -e '
              require "win32ole"
              @autoit = WIN32OLE.new("AutoItX3.Control")
              time    = Time.now
              while (Time.now - time) < 15 # the loop will wait up to 15 seconds for popup to appear
                #{POPUP_TITLES.inspect}.each do |popup_title|
                  next unless @autoit.WinWait(popup_title, "", 1) == 1
                  @autoit.ControlSetText(popup_title, "", "Edit1", #{path_to_file.inspect})
                  @autoit.ControlSend(popup_title, "", "Button2", "{ENTER}")
                  exit
                end # each
              end # while
          '}
        end.join(1)
      rescue
        raise Watir::Exception::WatirException, "Problem accessing Choose file dialog"
      end
      click
    end
  end

Текст "Выбирает, файл" теперь появляется в заголовке моего нового IE. Что-либо еще, что должно быть локализовано или изменено здесь? Я обновил снимок экрана к английской версии.

7
задан user89021 22 April 2010 в 21:17
поделиться

3 ответа

Я знал об этой проблеме и совсем забыл! Перейдите к файлу input_elements.rb в каталоге gems и добавьте заголовок окна загрузки файла на вашем языке в POPUP_TITLES (строка 443).

Пример:

  • до

     POPUP_TITLES = ['Выбрать файл', 'Выбрать файл для загрузки'] 
     
  • после

     POPUP_TITLES = ['Выбрать файл', 'Выбрать файл to Upload ',' Загрузка файла на моем языке '] 
     
3
ответ дан 7 December 2019 в 09:58
поделиться

Я бы посоветовал вам взглянуть на FileField #, установленный в input_elements.rb (в вашем каталоге драгоценных камней Ruby), и изменить sleep 1 на sleep 2 (или более высокое число). Я заметил, что на более медленных машинах для появления всплывающего окна загрузки файла требуется больше секунды.

0
ответ дан 7 December 2019 в 09:58
поделиться

Я установил windows xp на английском языке, и он работает! (Ошибка произошла на локализованном сервере Windows 2003)

Я думаю, это была проблема локализации. С этого момента я просто буду запускать watir на английском компьютере.

2
ответ дан 7 December 2019 в 09:58
поделиться
Другие вопросы по тегам:

Похожие вопросы: