IE браузер не закрывается и всплывающее окно загрузки файла требует внимания - PullRequest
1 голос
/ 17 июня 2010

Я пытаюсь щелкнуть ссылку после того, как она активна, и после нажатия снова появляется всплывающее окно (загрузка файла).Здесь у меня есть 2 проблемы

1) Я запускаю код и оставляю его. То, что делает код, - после долгого процесса - он ждет, когда ссылка будет активной. Как только ссылка активна, он нажимает на ссылкуи открывается всплывающее окно загрузки (если все идет хорошо), а затем зависает там (показывая желтый мигающий значок на панели задач, что означает, что я должен нажать на проводник, чтобы он обработал все, что будет дальше). Каждый раз, когда я нажимаю наIE всякий раз, когда появляется всплывающее окно загрузки. Есть ли способ справиться с этим или я делаю что-то не так?

2) Следующая проблема, даже если я нажимаю на IE. IE не приближается, хотяя пишу то естьмой код ниже:

                       ## if the link is active
                    ie.link(:text,a).click_no_wait
                     prompt_message = "Do you want to open or save this file?"
                     window_title = "File Download"
                     save_dialog =WIN32OLE.new("AutoItX3.Control")
                       save_dialog.WinGetText(window_title)

                       save_dialog_obtained =save_dialog.WinWaitActive(window_title)
                        save_dialog.WinKill(window_title)
                      # end
                      #'
                       #some more code -normal puts statements
                      #

                    ie.close

т.е. зависает по какой-то странной причине ..?

Ответы [ 2 ]

0 голосов
/ 13 июля 2010

Я не уверен в вашей проблеме с всплывающими окнами, но у меня есть код, чтобы справиться с тем, что я считаю очень неприятной собственной проблемой всплывающих окон. Поэтому я включил это для полноты. Здесь ваш т.е. браузерный объект эквивалентен моему экземпляру объекта @browser

require 'watir\winClicker'
require 'watir\contrib\enabled_popup'

def popup_clicker(text)
    begin
      Timeout::timeout 2 , PopupTimeout do
        if @browser.enabled_popup
          hwnd = @browser.enabled_popup(5)
          w = WinClicker.new
          w.makeWindowActive(hwnd)
          w.clickWindowsButton_hwnd(hwnd,text)
        end
      end
    rescue PopupTimeout
        # Do this line if you can't find a popup
    end
    @browser.wait
  end

Затем нажмите кнопку ОК, просто запустите

popup_clicker('OK')

Одна вещь, которую вы можете заметить, это то, что вам нужно вручную нажимать кнопку, которая запускает всплывающее окно с аппаратным щелчком. AutoIT может с этим справиться, или у меня есть ручной кликер элемента Watir, если вы этого хотите. Попробуйте это без первого. У меня также есть код для проверки содержимого всплывающего окна, если вы этого хотите (в основном, бросьте в него 'popup_text = w.getStaticText_hWnd (hwnd) .to_s').

Что касается 2), убедитесь, что объект ie по-прежнему установлен в браузере. Попробуйте прикрепить, как отметил Намрантха. Я не знал, т.е. Это должно сработать, заменив @browser по своему усмотрению, а XXX - это заголовок окна или эквивалент регулярного выражения:

@browser = Watir::IE.attach(:title, XXXX)
@browser.close

Кредит на оригинал кликера для всплывающих окон должен идти дальше всего в цепочке, которую я могу найти, прекрасный пользователь из группы Google Watir-General по имени Уэсли Чен:

http://groups.google.com/group/watir-general/browse_thread/thread/41c45aae9f87da9b

0 голосов
/ 13 июля 2010

Для № 2. Вы хотите «прикрепить» свой код к родительскому окну, а затем попытаться закрыть его. Похоже, когда открывается диалоговое окно загрузки, родительское окно теряет фокус. Вы можете попробовать -

т.е. = Watir :: IE.attach (: url,) (ИЛИ) т.е. = Watir :: IE.attach (: title,)

и попробуйте закрыть браузер.

...