Ruby 当autoIt用于处理文件下载框时,单击“否”第二次等待不起作用
我面临的问题是调用方法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 下面是我使用控件的方式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
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之前也处于睡眠状态