Браузер IE не закрывается, и всплывающее окно загрузки файла требует фокуса

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

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

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

                       ## 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

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


person kranthi jajula    schedule 17.06.2010    source источник
comment
Хотелось бы узнать, что означают эти теги :-)   -  person Pointy    schedule 17.06.2010
comment
AutoIt — это язык сценариев, ориентированный на манипулирование пользовательским интерфейсом Windows. Отличный инструмент, о котором нужно знать.   -  person Copas    schedule 18.06.2010


Ответы (2)


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

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

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

person Community    schedule 13.07.2010
comment
прикрепите, я считаю, что это обесценивается, кстати. Watir 3 использует тот же API переключения окон, что и пользователи watir-webdriver. однако я думаю, что всплывающее окно в этом случае не является окном браузера и должно обрабатываться на уровне ОС с помощью чего-то вроде AutoIt или RAutomation. - person Chuck van der Linden; 20.01.2012

Я не уверен в вашей проблеме с всплывающими окнами, но у меня есть код для решения того, что я считаю очень неприятной проблемой всплывающих окон. Поэтому я включаю его для полноты. Здесь ваш объект браузера ie эквивалентен моему объекту экземпляра @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

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

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

person kinofrost    schedule 13.07.2010