我正在使用硒进行黄瓜测试截图。我希望我的一个步骤是将屏幕截图文件放在一个文件夹中,文件夹名称是使用步骤+时间戳的输入生成的。
以下是我迄今所取得的成就:
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
源路径在步骤中指示,因此不同的用户不必修改定义。
答案 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