2

Webサイトからファイルをダウンロードしてフォルダーに追加するテストシナリオに取り組んでいます。ダウンロード部分には、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

File.exists?likeで「glob」を使用することはできませんFile.exists?("*.csv")*.csv名前が.で終わるファイルではなく、名前が付けられたファイルが存在するかどうかをチェックします.csv。正確なファイル名を使用して、ファイルが存在するかどうかを確認する必要があります。

于 2012-06-15T09:16:02.190 に答える
0

代わりに次のようにしてみてください。

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

また、1秒間の睡眠はどのように何かを変えることになっていますか?これはマルチスレッドアプリですか?

于 2012-06-15T09:19:40.683 に答える