【问题标题】:How do you open a zip file using watir-webdriver?如何使用 watir-webdriver 打开 zip 文件?
【发布时间】:2016-04-12 06:16:06
【问题描述】:

我的测试套件有一个带有 ruby​​ 后端的黄瓜前端,在最新版本的 OSX 之上运行最新版本的 watir-webdriver 及其依赖项。我的黄瓜环境设置为在 Firefox 中执行。

我们应用的导出功能会创建一个 zip 文件,但为了测试导入功能,我需要 zip 文件的内容。

我的实际测试需要解压缩该 zip 文件并选择其中的各个文件以用于测试我们的 Web 应用程序的导入功能。

谁能给我指出一个可以帮助我弄清楚如何写的参考资料?

【问题讨论】:

  • 我可能刚刚找到了解决方案。我以前从未使用过它,但我刚刚发现了 ruby​​zip gem。

标签: ruby selenium testing cucumber watir-webdriver


【解决方案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

【讨论】:

  • 这是一个非常有趣的方法,我在想可能有一个与 Selenium 相关的解决方案来解决这个问题。谢谢,但我最终使用 ruby​​zip gem 解决了我的问题..并将发布解决方案。
【解决方案2】:

我最终在 https://github.com/rubyzip/rubyzip 添加了 ruby​​zip gem 解决方案在那个链接上,但我稍微修改了我的。我将以下内容添加到我的 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

这个解决方案效果很好!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-10-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-02
    • 1970-01-01
    • 2016-12-15
    相关资源
    最近更新 更多