click_no_wait не работает второй раз, когда autoIt используется для обработки окна загрузки файла

Я столкнулся с проблемой, когда я вызываю метод click_no_wait для элемента управления, который отображает поле «Загрузка файла». Работает нормально с первого раза. Я использую Auto It для обработки окна загрузки файла и сохранения файла в определенном месте. Теперь, когда я пытаюсь использовать click_no_wait для того же элемента управления, он не отображает поле загрузки файла, но если я обновляю браузер перед вызовом click_no_wait, он отображает поле загрузки файла. Итак, мой вопрос заключается в том, что Auto It не выпускается, и поэтому click_no_wait не может найти элемент управления или что-то не так с реализацией метода click_no_wait.

Среда: ОС: Microsoft XP SP2 Ruby: ruby ​​1.8.6 patchelevel 398 Watir: 1.8.1

Вот как я использую элемент управления

def click_export_button 
  control = browser.button(:id,'export-button') 
  $DEBUG = true 
  #browser.refresh         #- If this line is not commented, the dialog appears 
  control.click_no_wait    #-- I replace click_no_wait with click and/or click! and the code freezes, so the control is found 
  download_file("C:\\test.csv") 
  $DEBUG = false 
end 

Вот код для скачивания файла

def download_file(filePath = nil) 
  autoIt = WIN32OLE.new("AutoItX3.Control") 
  timeout = 10 
  fileDownloadWindowTitle = "File Download" 
  handle = autoIt.WinWait(fileDownloadWindowTitle, "Do you want to open or save this file?", timeout) 
  retVal = nil 
  unless (handle.eql? @autoItError) 
    autoIt.WinActivate(fileDownloadWindowTitle) 
    autoIt.ControlClick(fileDownloadWindowTitle, "", "&Save") 
    saveWindowTitle = "Save As" 
    windowHandle = autoIt.WinWaitActive(saveWindowTitle, "", timeout) 
    if (windowHandle == 1) 
      retVal = save_file(saveWindowTitle, autoIt, filePath) #-- function to save the file to the location 
    end 
  else 
    puts "Unable to download the file" 
  end 
  autoIt.ole_free 
  return retVal 
end 

Вот ошибка, которую я получаю

ruby -e "$:.unshift('c:/ruby/lib/ruby/gems/1.8/gems/watir-1.8.1/lib/ 
watir/win32ole').unshift('c:/ruby/lib/ruby/gems/1.8/gems/ 
commonwatir-1.8.1/lib').unshift('c:/ruby/lib/ruby/gems/1.8/gems/ 
firewatir-1.8.1/lib').unshift('c:/ruby/lib/ruby/gems/1.8/gems/ 
watir-1.8.1/lib');require 'c:/ruby/lib/ruby/gems/1.8/gems/watir-1.8.1/ 
lib/watir/core';Watir::Button.new(Watir::IE.attach(:hwnd, 
6751822), :unique_number, 3).click!();" 
c:/ruby/lib/ruby/gems/1.8/gems/watir-1.8.1/lib/watir/element.rb:58:in 
`assert_exists': Unable to locate element, using :unique_number, 3 
(Watir::Exception::UnknownObjectException) 
        from c:/ruby/lib/ruby/gems/1.8/gems/watir-1.8.1/lib/watir/ 
element.rb:275:in `click!' 
        from -e:1 

Любая помощь будет оценена. заранее спасибо


person chaitanya    schedule 19.10.2011    source источник
comment
Я не уверен в этом достаточно, чтобы предложить его в качестве ответа, но я думаю, что в более поздних версиях Watir была некоторая работа над click_no_wait .. Возможно, вы захотите попробовать обновиться до более новой версии Watir и посмотреть, имеет ли это значение .   -  person Chuck van der Linden    schedule 26.10.2011
comment
Похоже, что потенциально может быть проблема с нажатием самой кнопки загрузки, а не с AutoIt. Что-то меняет HTML на вашей странице между первой и второй попытками загрузки файла? Может объяснить, почему это решено, обновлением. Идентификатор кнопки точно такой же, как до и после нажатия, да?   -  person anonygoose    schedule 26.10.2011
comment
Да, но некоторые элементы обновляются с помощью AJAX, например, скрытый или видимый div. У этого есть проблема с click_no_wait не может видеть элемент управления   -  person chaitanya    schedule 27.10.2011
comment
Я не совсем уверен. Если он работает как Watir-Webdriver, если вы сохраняете элементы в переменных для последующего использования, они станут недействительными, если HTML на странице значительно изменится. Поскольку ваш метод нажатия кнопки каждый раз определяет элемент внутри нее (control = browser.button (: id, 'export-button')), я действительно не вижу, что это проблема. Но на всякий случай попробуйте изменить свой код так, чтобы он всегда ссылался на кнопку, которую нажимает код watir напрямую, а не в переменной (т.е. всегда browser.button (: id, 'export-button'). Click_no_wait   -  person anonygoose    schedule 27.10.2011
comment
Я попробовал ваше предложение, оно все равно не сработало. Хорошо, если предположить, что вы сделали предложение, все еще не имеет никакого смысла, что метод click его находит, но click_no_wait не может его найти. Я думаю, что что-то не так с функцией click_no_wait, так как я также засыпал перед вызовом click_no_wait   -  person chaitanya    schedule 02.11.2011


Ответы (1)


Вы можете попробовать добавить следующее перед click_no_wait:

"browser.refresh"
person user2484152    schedule 13.06.2013