Ruby 当autoIt用于处理文件下载框时,单击“否”第二次等待不起作用

Ruby 当autoIt用于处理文件下载框时,单击“否”第二次等待不起作用,ruby,watir,autoit,Ruby,Watir,Autoit,我面临的问题是调用方法click\u no\u wait on a 控件,该控件显示“文件下载”框。它可以很好地工作 第一次。我使用Auto-It处理文件下载框并保存 文件位于特定位置。现在,当我尝试使用 单击同一控件上的“否”等待,它将不会显示文件下载 框,但如果我在调用click\u no\u wait之前刷新浏览器,则 将显示文件下载框。所以,我的问题是,这是 如果Auto未被释放,因此无法单击“否”等待 找到控件,或者实现有问题吗 单击“否”等待方法的 环境: 操作系统:微软XP SP2

我面临的问题是调用方法click\u no\u wait on a 控件,该控件显示“文件下载”框。它可以很好地工作 第一次。我使用Auto-It处理文件下载框并保存 文件位于特定位置。现在,当我尝试使用 单击同一控件上的“否”等待,它将不会显示文件下载 框,但如果我在调用click\u no\u wait之前刷新浏览器,则 将显示文件下载框。所以,我的问题是,这是 如果Auto未被释放,因此无法单击“否”等待 找到控件,或者实现有问题吗 单击“否”等待方法的

环境: 操作系统:微软XP SP2 Ruby:Ruby 1.8.6 patchelevel 398 瓦蒂尔: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 
任何帮助都将不胜感激。
提前感谢

在单击“否”等待之前,您可以尝试添加以下内容:

"browser.refresh"

我对此不太确定,无法给出答案,但我认为在最新版本的Watir中有一些关于click_no_wait的工作。。您可能想尝试更新到较新的Watir版本,看看这是否会有所不同。单击“下载”按钮本身可能会出现问题,而不是自动下载。在第一次和第二次尝试下载文件之间,页面上的html是否发生了变化?也许可以解释为什么通过刷新来解决这个问题。按钮上的ID在点击前和点击后肯定是相同的,是吗?是的,但是一些元素是由AJAX更新的,比如隐藏或显示一个div。这是否与单击有问题?否?等待无法看到控件我不完全确定。如果它像Watir Webdriver一样工作,如果您将元素存储在变量中供以后使用,那么如果页面上的html发生显著变化,这些元素将变得无效。由于每次单击按钮的方法都会定义其中的元素(control=browser.button(:id,'export-button')),因此我认为这不是问题所在。但为了以防万一,请尝试更改代码,使其始终引用watir代码直接单击的按钮,而不是在变量中(即始终是browser.button(:id,'export-button'))。click\u no\u wait我尝试了你的建议,但仍然不起作用。好吧,假设你提出的建议,click方法找到它仍然没有任何意义,但是click\u no\u wait找不到它。我认为click\u no\u wait功能可能有问题,因为我在调用click\u no\u wait之前也处于睡眠状态