我正在研究从网站下载文件并将其添加到文件夹的测试场景。 对于下载部分,我使用的是Watir文档中browser-downloads页面上描述的代码。 当我等待下载文件时,在我的测试中遇到了主要问题:
def verify_csv_file_exists
path = Dir.getwd + "/downloads/"
until File.exist?("#{path}*.csv") == true
sleep 1
end
end
运行测试时,上面的过程永远不会停止,因为虽然文件已下载,但它无法在目录中看到该文件。
有谁知道如何处理这种情况?
谢谢。
答案 0 :(得分:5)
您只需检查目录内容,然后下载文件,然后等待,直到有新文件添加到目录中(通过将当前内容与之前的内容进行比较)。这是您获取新文件名的方式:
这应该做的工作:
require 'watir-webdriver'
file_name = nil
download_directory = "#{Dir.pwd}/downloads"
download_directory.gsub!("/", "\\") if Selenium::WebDriver::Platform.windows?
downloads_before = Dir.entries download_directory
profile = Selenium::WebDriver::Firefox::Profile.new
profile['browser.download.folderList'] = 2 # custom location
profile['browser.download.dir'] = download_directory
profile['browser.helperApps.neverAsk.saveToDisk'] = "text/csv,application/pdf"
b = Watir::Browser.new :firefox, :profile => profile
b.goto 'https://dl.dropbox.com/u/18859962/hello.csv'
30.times do
difference = Dir.entries(download_directory) - downloads_before
if difference.size == 1
file_name = difference.first
break
end
sleep 1
end
raise "Could not locate a new file in the directory '#{download_directory}' within 30 seconds" if not file_name
puts file_name
答案 1 :(得分:0)
您不能将“glob”与File.exists?
File.exists?("*.csv")
一起使用。它检查名为*.csv
的文件是否存在,而不是名称以.csv
结尾的任何文件。您应该使用确切的文件名来检查文件是否存在。
答案 2 :(得分:0)
请尝试这样:
Dir.glob('downloads/*.csv').any?
另外,1秒的睡眠应该如何改变?这是一个多线程的应用程序吗?