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

Я столкнулся с проблемой, когда я вызываю метод 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 

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

1 Ответ

0 голосов
/ 14 июня 2013

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

"browser.refresh"
...