-1

きゅうりのテストにセレンを使用してスクリーンショットを撮っています。ステップの 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

ディレクトリが存在しない場合は、作成します。次に、すべてのスクリーンショットを新しいディレクトリに配置します。

フォルダはスクリーンショットと同じディレクトリに作成され、すべてのスクリーンショット ファイルがそのフォルダに移動さ​​れます。私はまだルビーを学んでいますが、これをまとめようとする試みはまったくうまくいきません:

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

screenshotsつまり、新しいディレクトリを作成してそこに移動shot1.pngしたいのですshot2.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 に答える