I'm using Selenium 3 webdriver and Python 3 in Windows 7.
I want to record a video of what's happening in my selenium tests.
To do so I'm using FFmpeg and screen-capture-recorder but I can change programs.
Here's my code:
import unittest
from selenium import webdriver
from subprocess import Popen
#from subprocess import call
cmd = 'ffmpeg -y -rtbufsize 2000M -f dshow -i video="screen-capture-recorder" -r 10 -t 20 screen-capture.mp4'
class SearchProductTest(unittest.TestCase):
def setUp(self):
# start the recording of movie
self.videoRecording = Popen(cmd)
# create a new Firefox session
self.driver = webdriver.Firefox()
self.driver.implicitly_wait(30)
self.driver.maximize_window()
# navigate to the application home page
self.driver.get("http://demo-store.seleniumacademy.com/")
def test_search_by_category(self):
# get the search textbox
search_field = self.driver.find_element_by_name("q")
search_field.clear()
# enter search keyword and submit
search_field.send_keys("phones")
search_field.submit()
# get all the anchor elements which have product names displayed
# currently on result page using find_elements_by_xpath method
products = self.driver.find_elements_by_xpath(
"//h2[@class='product-name']/a")
# check count of products shown in results
self.assertEqual(3, len(products))
#self.videoRecording.terminate()
def test_something_else(self):
pass
def tearDown(self):
# close the browser window
self.driver.quit()
# Stop the recording
self.videoRecording.terminate()
#def terminate(process):
#if process.poll() is None:
# call('taskkill /F /T /PID ' + str(process.pid))
if __name__ == '__main__':
unittest.main(verbosity=2)
The problems are:
1) the cmd
gives a max time per the movie (20" in the example). If the test last more the movie is created and it works (but is incomplete, only 20").
2) if the test last less the file is created but it doesn't work (the reader can't read it and it's just some bytes). This is the main error! I'm not sure about where to start the movie and where (and how) to stop it.
3) If I have more than one test I would like to have only one movie for all of them (so I want to record all the tests in the same movie).
4) if possible I would prefer to record the webdriver window (the one where my tests are running) and not my screen so meanwhile the tests go I can do something else (they are slow).
Thanks you for the help.