documentation/docs/article/guides/recording_video
sidebar_position: 10
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 :)
“`ruby {7,11-12,15-16}
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](https://docs.ruby-lang.org/ja/latest/method/Dir/s/mktmpdir.html) 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)`.
```ruby {5,8,12-13}
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.