Recording video
Playwright allows us to record the browser screen during automation. https://playwright.dev/docs/videos
With this awesome feature, NO NEED to keep our attention focused on the screen during the automation :)
require 'tmpdir'
playwright.chromium.launch do |browser|
Dir.mktmpdir do |tmp|
video_path = nil
browser.new_context(record_video_dir: tmp) do |context|
page = context.new_page
# play with page
# NOTE: Page#video is available **only when browser context is alive.**
video_path = page.video.path
end
# NOTE: video is completely saved **only after browser context is closed.**
handle_video_as_you_like(video_path)
end
Specify where to put videos
Playwright puts videos on the directory specified at record_video_dir
.
The previous example uses Dir#mktmpdir for storing videos into a temprary directory. Also we simply specify a relative or absolute path like ./my_videos/
or /path/to/videos
.
Getting video path and recorded video
This is really confusing for beginners, but in Playwright
- We can get the video path only when page is alive (before calling BrowserContext#close or Page#close)
- We can acquire the completely saved video only after calling BrowserContext#close
So in most case, we have to store the video path in advance, and handle the saved video after BrowserContext is closed, as is shown the previous example code.
Using video#save_as(path)
If you want to just save video to somewhere without handling the video using File.open
, you can simply use video#save_as(path_to_save)
.
require 'tmpdir'
playwright.chromium.launch do |browser|
Dir.mktmpdir do |tmp|
page = nil
browser.new_context(record_video_dir: tmp) do |context|
page = context.new_page
# play with page
end
# NOTE: video is completely saved **only after browser context is closed.**
page.video.save_as('my-important-video.webm')
end
Using screen recording from Capybara driver
capybara-playwright-driver exposes a function to store the video.
Capybara.current_session.driver.on_save_screenrecord do |video_path|
# Handling recorded video here.
# video_path is like '/var/folders/xx/xxxxxxxxxx_xxxxxxxx/T/xxxxxxx-xxxxx-xxxxxxxx/e6bde41c5d05b2a02344b058bf1bfea2.webm'
end
With this callback registration, we can record the videos without specifying record_video_dir
explicitly or preparing a temporary directory. capybara-playwright-driver automatically prepare and set record_video_dir
internally.