2016-01-07 55 views
1

我的測試套件有一個帶紅寶石後端的黃瓜前端,在最新版本的OSX上運行最新版本的watir-webdriver及其依賴關係。我的黃瓜環境設置爲在Firefox中執行。如何使用watir-webdriver打開一個zip文件?

我們的應用程序的導出功能創建一個zip文件,但爲了測試導入功能,我需要zip文件的內容。

我的實際測試需要解壓該zip文件並選擇其中的單個文件以用於測試我們的Web應用程序的導入功能。

任何人都可以指出一個參考,可以幫助我弄清楚如何寫?

+0

我可能剛剛找到了解決方案。我從來沒有用過它,但我剛剛發現了rubyzip寶石。 –

回答

1

根據我的經驗,您可以像普通用戶一樣下載此文件。因此,首先,您只需單擊下載按鈕或其他任何內容,然後即可訪問該文件,並查看其內容。

假設下載只需到默認的下載文件夾,裏面是一些簡單的代碼,你可以用它來選擇最近下載的項目:

fn = Dir.glob("~/Downloads/*.zip").max { |a,b| File.ctime(a) <=> File.ctime(b)} 

然後,只需使用unzip shell命令解壓文件。當您只需使用通用shell命令時,沒有理由在混音中添加另一個gem。

`unzip #{fn}` 

然後,您可以再次使用Dir.glob得到解壓縮文件的文件夾內的所有文件名。假設該文件被命名爲「thing.zip」,你這樣做:

files = Dir.glob("~/Downloads/thing/*") 

如果你想要的文件直接下載到您的項目文件夾,你可以試試這個。這也可以防止彈出窗口詢問你是否真的想保存這個方便的文件。我認爲這仍然有效,但在一段時間內沒有使用它。上述的東西肯定會有效。

profile = Selenium::WebDriver::Firefox::Profile.new  
download_dir = Dir.pwd + "/test_downloads" 
profile['browser.download.dir'] = download_dir 
profile['browser.helperApps.neverAsk.saveToDisk'] = "application/zip" 
b = Watir::Browser.new. :firefox, :profile => profile 
+0

這是一個非常有趣的方法,我在想這可能是硒相關的解決方案。謝謝,但我最終使用rubyzip gem解決了我的問題。並且會發布解決方案。 –

0

我結束了在https://github.com/rubyzip/rubyzip 的解決方案是鏈接添加rubyzip寶石,但我修改了我的一點點。我將以下內容添加到了我的common.rb文件中。見下:

require 'Zip' 

    def unpack_zip 

    test_home='/Users/yournamegoeshere/SRC/watir_testing/project files' 

    sleep(5) #<--manually making time to hit the save download dialog 

    zip_file_paths = [] 
    Find.find(test_home) do |path| 
    zip_file_paths << path if path =~ /.*\.zip$/ 
    end 

    file_name=zip_file_paths[0] 

    Zip::File.open(file_name) do |zip_file| 

    # Handle entries one by one 
    zip_file.each do |entry| 

     # Extract to file/directory/symlink 
     puts "Extracting #{entry.name}" 
     entry.extract(test_home + "/" + entry.name) 

     # Read into memory 
     content = entry.get_input_stream.read 
    end 

    # Find specific entry 
    entry = zip_file.glob('*.csv').first 
    puts entry.get_input_stream.read 
    end 
end 

該解決方案效果很好!