-1

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

这是我到目前为止所取得的成就:

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

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

该文件夹将创建在与屏幕截图相同的目录中,然后将所有屏幕截图文件移动到该文件夹​​中。我仍在学习 ruby​​,而我尝试将其组合在一起的尝试根本没有成功:

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

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

4

1 回答 1

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
于 2013-07-24T22:22:47.653 回答