Ruby 如何使用watir webdriver打开zip文件?
我的测试套件有一个cucumber前端和一个ruby后端,在最新版本的OSX上运行最新版本的watir webdriver及其依赖项。我的cucumber环境设置为在Firefox中执行 我们应用程序的导出功能创建了一个zip文件,但为了测试导入功能,我需要zip文件的内容 我的实际测试需要解压该zip文件,并选择其中的各个文件,以用于测试web应用程序的导入功能Ruby 如何使用watir webdriver打开zip文件?,ruby,selenium,testing,cucumber,watir-webdriver,Ruby,Selenium,Testing,Cucumber,Watir Webdriver,我的测试套件有一个cucumber前端和一个ruby后端,在最新版本的OSX上运行最新版本的watir webdriver及其依赖项。我的cucumber环境设置为在Firefox中执行 我们应用程序的导出功能创建了一个zip文件,但为了测试导入功能,我需要zip文件的内容 我的实际测试需要解压该zip文件,并选择其中的各个文件,以用于测试web应用程序的导入功能 有人能给我指一个参考资料来帮助我找出如何写这个吗?根据我的经验,你可以像普通用户一样下载这个文件。因此,首先,您只需单击下载按钮或其
有人能给我指一个参考资料来帮助我找出如何写这个吗?根据我的经验,你可以像普通用户一样下载这个文件。因此,首先,您只需单击下载按钮或其他什么,然后就可以访问文件,无论它在哪里,并检查其内容 假设默认情况下下载只进入下载文件夹,您可以使用一些简单的代码来选择最近下载的项目:
fn = Dir.glob("~/Downloads/*.zip").max { |a,b| File.ctime(a) <=> File.ctime(b)}
然后,再次使用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
我最后在 解决方案就在这个链接上,但我对我的做了一点修改。我在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
这个解决方案非常有效 我可能刚刚找到了解决办法。我以前从未使用过它,但我刚刚发现了rubyzip宝石。这是一个非常有趣的方法,我想可能有一个硒相关的解决方案来解决这个问题。谢谢,但我最终还是用rubyzip gem解决了我的问题,并将发布解决方案。
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