我在Windows 7中使用Selenium 3 webdriver和Python 3。

我想录制有关硒测试中发生的事情的视频。

为此,我正在使用FFmpegscreen-capture-recorder,但是我可以更改程序。

这是我的代码:

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)


问题是:

1)cmd给出了每部电影的最长时间(示例中为20英寸)。如果测试持续了更多次,则该电影将创建并且可以正常工作(但不完整,只有20英寸)。

2)如果测试的最后一次创建的文件少,但它不起作用(读者无法读取它,它只是一些字节)。这是主要错误!我不确定从哪里开始看电影以及在哪里(以及如何)停止看电影。

3)如果我有多个测试,那么我只想为所有这些电影制作一部电影(因此我想将所有测试记录在同一部电影中)。

4)如果可能的话,我希望记录webdriver窗口(正在运行测试的窗口)而不是屏幕,因此在测试进行的同时,我可以做其他事情(它们很慢)。

感谢您的帮助。

最佳答案

WebDriver有3种可能对您有用的方法:get_screenshot_as_png,get_screenshot_as_base64和get_screenshot_as_file。这样,您可以在后台线程中截取屏幕截图并使用OpenCV and PIL to generate a video file from the results.

如果您不想引入新的依赖项,则还可以将屏幕快照转储到文件中,最后use ffmpeg to generate a video as well.

10-08 03:52