如何使用 watir-webdriver 打开 zip 文件?
How do you open a zip file using watir-webdriver?
我的测试套件有一个带有 ruby 后端的黄瓜前端,运行 最新版本的 watir-webdriver 及其依赖项位于最新版本的 OSX 之上。我的黄瓜环境设置为在 Firefox 中执行。
我们应用程序的导出功能创建了一个 zip 文件,但为了测试导入功能,我需要该 zip 文件的内容。
我的实际测试需要解压缩该 zip 文件和 select 其中的各个文件,以用于测试我们的 Web 应用程序的导入功能。
任何人都可以指出可以帮助我弄清楚如何编写的参考吗?
根据我的经验,您可以像普通用户一样下载此文件。因此,首先,您只需单击下载按钮或其他任何按钮,然后就可以在任何位置访问该文件并查看其内容。
假设下载默认情况下只是转到您的下载文件夹,您可以使用一些简单的代码来 select 最近下载的项目:
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
我最终在 https://github.com/rubyzip/rubyzip 添加了 rubyzip gem
解决方案就在 link 上,但我稍微修改了我的。我将以下内容添加到我的 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
这个解决方案非常有效!
我的测试套件有一个带有 ruby 后端的黄瓜前端,运行 最新版本的 watir-webdriver 及其依赖项位于最新版本的 OSX 之上。我的黄瓜环境设置为在 Firefox 中执行。
我们应用程序的导出功能创建了一个 zip 文件,但为了测试导入功能,我需要该 zip 文件的内容。
我的实际测试需要解压缩该 zip 文件和 select 其中的各个文件,以用于测试我们的 Web 应用程序的导入功能。
任何人都可以指出可以帮助我弄清楚如何编写的参考吗?
根据我的经验,您可以像普通用户一样下载此文件。因此,首先,您只需单击下载按钮或其他任何按钮,然后就可以在任何位置访问该文件并查看其内容。
假设下载默认情况下只是转到您的下载文件夹,您可以使用一些简单的代码来 select 最近下载的项目:
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
我最终在 https://github.com/rubyzip/rubyzip 添加了 rubyzip gem 解决方案就在 link 上,但我稍微修改了我的。我将以下内容添加到我的 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
这个解决方案非常有效!