Windows10下如何在Selenium Python运行时录制屏幕(测试失败复盘)
Hey there! 针对你想在Selenium测试失败时录制完整屏幕操作过程的需求,我整理了几个实用的方案,不用依赖截图就能完整还原测试流程:
方案1:Python环境下用
pyautogui + opencv-python集成录屏 这个方案可以直接把录屏逻辑嵌入你的测试代码,全程录制屏幕,或者在测试失败时自动保存录制文件,适合本地运行的测试场景。
步骤:
- 先安装依赖包:
pip install pyautogui opencv-python numpy
- 编写录屏工具类,结合Selenium测试流程:
import pyautogui import cv2 import numpy as np import time import threading from selenium import webdriver class ScreenRecorder: def __init__(self, filename="selenium_test_recording.mp4"): self.filename = filename self.screen_dim = pyautogui.size() # 初始化视频写入器 self.video_writer = cv2.VideoWriter( filename, cv2.VideoWriter_fourcc(*"mp4v"), 20.0, # 帧率,可根据需求调整 self.screen_dim ) self.is_recording = False def start_recording(self): self.is_recording = True while self.is_recording: # 截取屏幕画面 screen_shot = pyautogui.screenshot() frame = np.array(screen_shot) # 转换颜色空间(pyautogui截图是RGB,opencv需要BGR) frame = cv2.cvtColor(frame, cv2.COLOR_RGB2BGR) self.video_writer.write(frame) time.sleep(0.05) # 控制录制间隔,避免资源占用过高 def stop_recording(self): self.is_recording = False self.video_writer.release() cv2.destroyAllWindows() # 测试示例 if __name__ == "__main__": recorder = ScreenRecorder() # 启动录屏线程,避免阻塞Selenium执行 record_thread = threading.Thread(target=recorder.start_recording) record_thread.start() try: driver = webdriver.Chrome() driver.get("https://example.com") # 模拟测试失败场景 assert driver.title == "Invalid Title" except AssertionError: print("测试失败,已保存录屏文件") finally: driver.quit() # 停止录屏并等待线程结束 recorder.stop_recording() record_thread.join()
说明:这个方案是全局录屏,能捕捉到所有桌面操作,线程化的实现不会影响Selenium的测试执行,测试结束后自动保存完整视频。
方案2:用
ffmpeg命令行工具录屏(跨平台通用) ffmpeg是一款轻量高效的多媒体处理工具,通过命令行启动录屏,适合多种编程语言环境,生成的视频文件体积更小、效率更高。
步骤:
- 先安装ffmpeg(确保能在命令行直接调用,Windows需添加到环境变量,Linux/macOS可通过包管理器安装)
- 在测试代码中启动ffmpeg录屏进程,测试结束后终止进程保存视频:
import subprocess import os from selenium import webdriver def start_ffmpeg_recording(output_file="selenium_ffmpeg_recording.mp4"): # 根据操作系统选择录屏命令 if os.name == "nt": # Windows平台使用gdigrab抓取桌面 cmd = [ "ffmpeg", "-f", "gdigrab", "-framerate", "15", "-i", "desktop", "-c:v", "libx264", "-preset", "ultrafast", output_file ] else: # Linux平台使用x11grab(需提前安装x11grab组件) cmd = [ "ffmpeg", "-f", "x11grab", "-framerate", "15", "-video_size", "1920x1080", # 替换为你的屏幕分辨率 "-i", ":0.0", "-c:v", "libx264", "-preset", "ultrafast", output_file ] # 启动后台进程 return subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE) # 测试示例 if __name__ == "__main__": recorder_proc = start_ffmpeg_recording() try: driver = webdriver.Chrome() driver.get("https://example.com") # 模拟测试失败 driver.find_element("id", "non-existent-element") except Exception as e: print(f"测试失败:{str(e)}") finally: driver.quit() # 终止录屏进程,自动保存视频 recorder_proc.terminate() recorder_proc.wait()
说明:ffmpeg的录屏性能优于Python库,适合持续集成环境或长时间录制的场景,你也可以根据需要调整帧率、视频编码参数来平衡质量和文件大小。
方案3:Selenium Grid/远程测试场景的录屏
如果你的测试是在Selenium Grid(比如Docker部署的Grid)或云测试平台上运行的,很多服务自带录屏功能:
- Selenium Grid 4的官方Docker镜像支持通过环境变量启用录屏,测试结束后视频会自动保存到指定挂载目录
- 主流云测试平台内置了测试录屏功能,测试失败时会自动生成并保存操作视频,无需额外代码开发
额外优化提示:
- 可以添加逻辑:测试成功时删除临时录制文件,仅在失败时保留视频,节省存储空间
- 针对多窗口测试,确保录屏范围覆盖所有可能的操作窗口(ffmpeg可以指定抓取特定窗口,需要额外配置窗口ID)
- 调整帧率(15-20帧/秒通常足够还原操作流程,过高会增加文件大小)
内容的提问来源于stack exchange,提问作者Yakir Tsuberi
相关产品推荐
相关产品推荐

