You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Windows10下如何在Selenium Python运行时录制屏幕(测试失败复盘)

Hey there! 针对你想在Selenium测试失败时录制完整屏幕操作过程的需求,我整理了几个实用的方案,不用依赖截图就能完整还原测试流程:

方案1:Python环境下用pyautogui + opencv-python集成录屏

这个方案可以直接把录屏逻辑嵌入你的测试代码,全程录制屏幕,或者在测试失败时自动保存录制文件,适合本地运行的测试场景。

步骤:

  1. 先安装依赖包:
pip install pyautogui opencv-python numpy
  1. 编写录屏工具类,结合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是一款轻量高效的多媒体处理工具,通过命令行启动录屏,适合多种编程语言环境,生成的视频文件体积更小、效率更高。

步骤:

  1. 先安装ffmpeg(确保能在命令行直接调用,Windows需添加到环境变量,Linux/macOS可通过包管理器安装)
  2. 在测试代码中启动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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 10:11:34