在hook ruby之后重命名video record

aemubtdh  于 2023-04-29  发布在  Ruby
关注(0)|答案(2)|浏览(87)

嗨,我已经在我的项目中实现了Selenoid,默认情况下,它将视频记录命名为“selenoid +浏览器会话ID”。mp4 ',我想将其更改为带有场景名称的时间戳。
以下是我到目前为止所做的:

def rename_video_files(scenario, failed = false)
  Dir.glob("/end-to-end-test/test-reports/video-logs") do
    File.rename("#{page.driver.browser.session_id}.mp4", 
    "#{Time.now.strftime('%Y-%m-%d_%H-%M-%S')}_#{scenario
      .name}#{failed ? '-FAILED' : ''}.mp4"
      .gsub(/[^0-9A-Za-z.\-]/, '_'))
  end

钩子之后:

After('@ui') do |scenario|
  rename_video = rename_video_files(scenario, failed = false)
  logger.info "Recorded video name: #{rename_video}.mp4"
  page.driver.quit
end

测试通过,但视频记录的名称保持不变。
新编辑:显然selenoid创建记录时,首先将其命名为'selenoidxxxx.mp4',并在测试完成后用session_id重命名它。mp4默认因此,我无法在after步骤中捕获带有session_id的文件名,因为它还没有重命名。

zdwk9cvp

zdwk9cvp1#

您必须在Dir中包含此扩展,然后重试

Dir.glob("/end-to-end-test/test-reports/video-logs/*.mp4") do |file|

end
7vhp5slm

7vhp5slm2#

我找到了工作解决方案:
后续步骤:

After('not @noui') do |scenario|
    arr = Dir.glob("../test-reports/video-logs/selenoid*.mp4")
    string1 = arr.join(",")
    string2 = "../test-reports/video-logs/#{rename_video_files(scenario, failed = false)}"
    File.rename(string1, string2)
    logger.info "Recorded video name: #{string2}.mp4"
    page.driver.quit
end

rename_video_files方法:

def rename_video_files(scenario, failed = false)
    "#{Time.now.strftime('%Y-%m-%d_%H-%M-%S')}_#{scenario
     .name}#{failed ? '-FAILED' : ''}.mp4"
     .gsub(/[^0-9A-Za-z.\-]/, '_')
 end

相关问题