обработка всплывающего окна, генерируемого при заполнении поля загрузки файла - PullRequest
0 голосов
/ 12 декабря 2011

Я просматривал раздел загрузки файлов в вики Watir Загрузка файлов Watir

Среда, которую я использую:

  • Рубин: 1,8,7
  • Watir: 1.8.1

мой код выглядит так:

ie = Watir::Browser.start("tinypic.com") 
ie.file_field(:id, "the_file").set("C:\\image.png")

Теперь, когда файл "image.png" не существует, он создает всплывающее окно, как показано ниже Error Popup

Я пытался использовать обработчики всплывающих окон, присутствующие в разделе всплывающих окон Javacript на вики, но после отладки я обнаружил, что метод set не возвращается, если всплывающее окно не обработано.

Что было бы хорошим способом справиться с этим? При поиске в Google я обнаружил, что вы можете запустить другой процесс в Ruby и попытаться закрыть всплывающее окно. Если это так, могу ли я получить пример кода или рекомендации о том, как действовать, как указано выше?

Спасибо за любую помощь.

Ответы [ 2 ]

0 голосов
/ 14 декабря 2011

Спасибо за ваш вклад, Кевин,

Я на самом деле придумал этот ответ [который я подправил из метода Ватира Вики 1]. Кредиты Джорджу на следующий пост на Генерале Ватира. Я написал обработчик всплывающих окон так:

require 'win32ole' 
title = "Choose File to Upload"

      begin
         popupOccurred = false
         autoIt = WIN32OLE.new('AutoItX3.Control')
         timeout = 15
         autoIt.WinWait(title, '', timeout)
         autoIt.ControlClick(title, "", "&Open")
         sleep 1
         autoIt.WinWait(title, '', timeout)
         isClicked = autoIt.ControlClick(title, "", "OK")
         sleep 1
         autoIt.ControlClick(title, "", "Cancel") if (isClicked == 1)
         autoIt.ole_free
      rescue
        puts "Error closing popup, please close Manually"
      end

и в своем фрагменте кода я сделал следующее:

require 'watir'

b = Watir::Browser.start("tinypic.com")
#-- Launches the popup closer in a different process. other methods like
#-- Process.create or system(start rubyw C:\\popup_handler2.rb) or having the
#-- popup handler in a Thread did not work for me.
system("start ruby C:\\popup_handler2.rb") 
b.file_field(:id, "the_file").set("C:\\image.png")

Я определенно буду признателен за отзывы от гуру / разработчиков / разработчиков Watir.

Спасибо

Chaitanya

0 голосов
/ 13 декабря 2011

Мне тоже очень интересен этот ответ, и у меня есть некоторая информация ... Я использую watir-webdriver, но я думаю, что у нас может быть та же проблема.

В watir-webdriver я могу обрабатывать большинство всплывающих окон, используя расширение AlertHelper или вручную переписывая функцию javascript. Эти два метода описаны в http://watirwebdriver.com/javascript-dialogs/ ... и «ручное переопределение» (далее на странице), безусловно, должно работать и для IE Watir.

Вы бы включили эту строку: ie.execute_script ("window.alert = function () {}")

непосредственно перед вашей строкой: ie.file_field (: id, "the_file"). Set ("C: \ image.png")

Это может сработать для вас.

Однако эти методы не работают, если AJAX и PHP динамически генерируют предупреждение или диалог. Я искал решение о том, как взаимодействовать с динамически загружаемыми предупреждениями JavaScript, которые вызываются, когда PHP отправляет их на страницу. Обсуждение на https://github.com/jarib/watir-webdriver/issues/103 наводит меня на мысль, что selenium-webdriver может сделать это только с помощью методов alert_box.text и alert_box.dismiss, но API watir-webdriver еще не воспользовался этим, поскольку Я вижу.

Спасибо всем, кто может представить более полное решение о том, как обрабатывать динамически генерируемые оповещения в watir и watir-webdriver.

Кевин

...