2

我正在研究从网站下载文件并将其添加到文件夹的测试场景。对于下载部分,我使用的是 Watir 文档中浏览器下载页面上描述的代码。当我等待文件下载时,我的测试中遇到了主要问题:

    def verify_csv_file_exists
     path = Dir.getwd + "/downloads/"
     until File.exist?("#{path}*.csv") == true
      sleep 1
     end 
    end

运行测试时,上面的过程永远不会停止,因为它看不到目录中的文件,尽管文件已下载。

有谁知道我如何处理这种情况?

谢谢你。

4

3 回答 3

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
于 2012-06-15T11:29:56.223 回答
0

您不能将“glob”与File.exists?like一起使用File.exists?("*.csv")。它检查名为的文件是否*.csv存在,而不是任何名称以 . 结尾的文件.csv。您应该使用确切的文件名来检查文件是否存在。

于 2012-06-15T09:16:02.190 回答
0

试试这样:

Dir.glob('downloads/*.csv').any?

另外,睡一秒钟应该如何改变什么?这是一个多线程应用程序吗?

于 2012-06-15T09:19:40.683 回答