创建一个目录并将文件移入其中

时间:2013-07-24 20:58:16

标签: ruby selenium cucumber

我正在使用硒进行黄瓜测试截图。我希望我的一个步骤是将屏幕截图文件放在一个文件夹中,文件夹名称是使用步骤+时间戳的输入生成的。

以下是我迄今所取得的成就:

Then /^screen shots are placed in the folder "(.*)"$/ do |folder_name|
    time = Time.now.strftime("%Y%m%d%H%M%S")
    source ="screen_shots"
    destination = "screen_shots\_#{folder_name}_#{time}"

    if !Dir.exists? destination
        Dir.new destination

    end
    Dir.glob(File.join(source, '*')).each do |file|

        if File.exists? (file)

                File.move file, File.join(destination, File.basename(file))
        end
    end
end

如果目录不存在,我想创建它。然后我想将所有屏幕截图放入新目录。

将在与屏幕截图相同的目录中创建文件夹,然后将所有屏幕截图文件移动到该文件夹​​中。我还在学习红宝石,我试图把它放在一起根本没有用完:

Desktop > cucumber_project_folder > screenshots_folder > shot1.png, shot2.png

简而言之,我想在screenshots中创建一个新目录,并将shot1.pngshot2.png移入其中。我怎么能这样做?

基于给出的答案,这是解决方案(黄瓜)

Then /^screen shots are placed in the folder "(.*)" contained in "(.*)"$/ do |folder_name, source_path|
  date_time = Time.now.strftime('%m-%d-%Y %H:%M:%S')
  source = Pathname.new(source_path)
  destination = source + "#{folder_name}_#{date_time}"
  destination.mkdir unless destination.exist?
  files = source.children.find_all { |f| f.file? and f.fnmatch?('*.png') }
  FileUtils.move(files, destination)
end

源路径在步骤中指示,因此不同的用户不必修改定义。

1 个答案:

答案 0 :(得分:2)

我不确定你的第一行代码是怎么回事

Then /^screen shots are placed in the folder "(.*)"$/ do |folder_name|

因为它不是Ruby代码,但我已经使用了文件中的名义行。

  • Pathname课程允许使用destination.exist?而不是File.exist?(destination)。它还允许您使用+构建复合路径,并提供children方法。

  • FileUtils模块提供move工具。

  • 请注意,Ruby允许在Windows路径中使用正斜杠,并且通常更容易使用它们而不必在任何地方转义反斜杠。

我还在目录名中的日期和时间之间添加了一个连字符,否则它几乎不可读。

require 'pathname'
require 'fileutils'

source = Pathname.new('C:/my/source')

line = 'screen shots are placed in the folder "screenshots"'

/^screen shots are placed in the folder "(.*)"$/.match(line) do |m|

  folder_name = m[1]
  date_time = Time.now.strftime('%Y%m%d-%H%M%S')

  destination = source + "#{folder_name}_#{date_time}"
  destination.mkdir unless destination.exist?
  jpgs = source.children.find_all { |f| f.file? and f.fnmatch?('*.jpg') }
  FileUtils.move(jpgs, destination)

end