我正在使用Watir-Webdriver和Firefox以及watirwebdriver.com网站上推荐的方法来自动执行文件下载。这包括设置FireFox about:config参数以禁用FireFox中的特定文件类型的下载对话框。这很好,但现在我试图找出如何最好地确定文件下载何时完成(有些需要几秒钟,有些需要几分钟),所以我可以注销站点并转到下一个测试。因为浏览器中没有可视的线索,所以我可能不得不在下载目录中监视文件。任何选项将不胜感激。Watir-Webdriver等待下载完成
9
A
回答
2
也许你可以跟踪文件大小,看看它何时停止改变几秒钟。
1
我有一个不同的文件下载自动化方法。 我不喜欢这样写道:
的requiures:
require 'rubygems'
require 'watir-webdriver'
require 'win32ole'
首先创建一个方法为作品尺寸处理:
def fileinfo(name)
if File.exists?(name)
print "#{name} exists "
bytes = File.size(name)
print "and is #{bytes} in size;"
whenm = File.mtime(name)
print whenm,";"
print whenm.to_i,";"
else
print "#{name} does NOT exist;"
end
end
其次开车铬与预先设定的加快下载目录:
download_directory = "#{Dir.pwd}/downloads"
download_directory.gsub!("/", "\\") if Selenium::WebDriver::Platform.windows?
profile = Selenium::WebDriver::Chrome::Profile.new
profile['download.prompt_for_download'] = false
profile['download.default_directory'] = download_directory
下一步从测试用例中删除文件(从以前的运行)重用性和区分有效性(3一个):
%x(DEL /Q C:\\automation\\qa\\downloads\\*.exe)
%x(DEL /Q downloads\\*.exe)
%x(DEL /Q downloads\\*.*)
定义下载的组件的大小可变:
contains = Dir.new(download_directory).entries
dlc = contains[2]
dcinfo = fileinfo("downloads/"+dlc)
dlcsize = File.size("downloads/"+dlc)
并且最后可以包括验证点:
if dlcsize > 0
puts "File found and is #{dlcsize} bytes."
logfile = open("test_results.csv", "a")
begin
logRow = "#{__FILE__}"
logfile.puts logRow + "," + "Passed".to_s
end
else
puts "Test Failed! File not found either is zero."
logfile = open("test_results.csv", "a")
begin
logRow = "#{__FILE__}"
logfile.puts logRow + "," + "Passed".to_s
end
end
2
我不喜欢看文件大小,它感觉很脆弱,所以我最终使用lsof命令来检测何时没有进程保持文件打开,然后读取文件。由于网络打嗝导致下载暂停不会导致间歇性错误,但更糟糕的是(?),因为它不可移植并且不能移植到lsof命令。
的编码看起来是这样的:
# Watch the download dir for new files, and read the first new file that
# appears.
def read_newest_download
existing_files = list_files_in_download_dir
new_files = []
Timeout::timeout(DOWNLOAD_TIMEOUT) do
while (new_files = list_files_in_download_dir - existing_files).empty?
sleep 0.25
end
end
if 1 == new_files.size
wait_for_file_to_be_closed(new_files.first)
File.read(new_files.first)
else
fail "Found #{new_files.size} new files."
end
end
# Ignore files ending in .part, which is common for temp files in Firefox.
def list_files_in_download_dir
raise ArgumentError, "No download dir specified" unless @opts[:download_dir]
@_download_glob ||= File.join(@opts[:download_dir], "*")
# Ignore files ending in .part as they're temporary files from Firefox.
Dir[@_download_glob].entries.reject {|e| /\.part$/ === e}
end
def wait_for_file_to_be_closed(filename)
begin
sleep 0.25
end until `lsof #{filename}`.blank?
end
2
Chrome储存在未完成下载与添加.crdownload
文件扩展名。请检查是否下载目录中有.crdownload
结尾的文件,这应该告诉你,如果一个下载仍在进行中
0
我处理这个问题的方式,是下列
Firefox下载文件有。部分
结束已将所有文件的名称在追加后下载到列表中。部分”他们 不断循环在名单上,并检查是否有这些文件的 lsdir下载文件夹
Python代码仍然存在:
import os
import time
def wait_till_download():
if len(new_part_files) > 0:
time.sleep(1)
for part_file in new_part_files:
if part_file in os.listdir("."):
print "Downloading..."
wait_till_download()
注:当没有部分文件在os.listdir('.')
,这意味着下载完成
1
我有一个类似的任务,我想提取下载的PDF文件的内容,我用以下解决方案:
t = ''
(0..19).each do
sleep 5
t = `pdftotext -raw some_directory/*.pdf -`
break if $?.success?
end
它在使用shell命令pdftotext提取文本时会执行20次尝试,并且如果shell命令成功,将跳出该块。这样做的好处是,如果文件不存在或文件只是部分下载,将会产生错误,然后重试。如果您的文件不是PDF或者您不关心内容,那么您可以使用另一个shell命令而不是pdftotext,只要文件不完整就会产生错误。
相关问题
- 1. 等待下载完成
- 2. 下载文件,并等待下载完成
- 3. 等待完成
- 4. 等待完成
- 5. 等待$ .post完成
- 6. 等待NSURLSessionTask完成
- 7. jquery,等待完成
- 8. 等待webrequest完成
- 9. delayed_job等待完成
- 10. QNetworkReply等待完成
- 11. 等待AsyncTask完成
- 12. 等待webworker完成
- 13. 如何等待axWebBrowser完成加载?
- 14. 如何等待卸载程序完成?
- 15. AS3:等待多个加载器完成
- 16. 如何等待下载任务快速完成3
- 17. 等待下载任务在NSURLSession中完成
- 18. 等待完成处理程序完成
- 19. cocos2d iphone等待动作完成/完成
- 20. jQuery完成后不等待它完成
- 21. 活动完成方法等待完成?
- 22. 硒等待下载?
- 23. JQUERY - 等待window.location.href来完成
- 24. 等待click事件完成
- 25. 等待$ http.get调用完成
- 26. jQuery.when不等待完成
- 27. 如何等待SwingWorker完成?
- 28. 等待事件完成
- 29. Android等待动画完成
- 30. Windows:等待进程完成
这几乎是我找到的唯一解决方案。这不是很令人满意,因为我必须跟踪文件,了解Firefox如何处理下载。它可以工作,但在控制不同的浏览器时不可移植。 – user1142012 2012-01-26 05:03:44
当您的网络连接不稳定时,您也可能遇到问题。 – encoded 2012-11-16 22:43:49