如何在Robot Framework+Selenium(Python)中修改自动截图命名规则?
解决Robot Framework自动截图自定义命名问题
核心方案:使用Listener拦截框架截图事件
Robot Framework在关键字失败时自动生成的截图由框架核心逻辑触发,无法通过普通关键字直接修改命名规则。通过自定义Listener可以拦截截图生成事件,替换默认文件名。
步骤1:编写Python Listener文件
创建CustomScreenshotListener.py,代码如下:
from robot.libraries.BuiltIn import BuiltIn class CustomScreenshotListener: ROBOT_LISTENER_API_VERSION = 3 def __init__(self): self.current_test_name = None def start_test(self, test, result): # 捕获当前测试名称,替换文件名非法字符 self.current_test_name = test.name.replace(" ", "_").replace("/", "_").replace("\\", "_") def _screenshot(self, path): # 替换默认截图文件名前缀 if self.current_test_name and "selenium-screenshot" in path: return path.replace("selenium-screenshot", f"{self.current_test_name}-screen")
步骤2:在测试套件中引入Listener
在测试套件的*** Settings ***区块添加Listener配置:
*** Settings *** Library SeleniumLibrary Listener CustomScreenshotListener.py # 若文件不在当前目录,需写绝对路径或相对路径
方案说明
start_test方法会在每个测试用例启动时捕获测试名称,提前处理空格、斜杠等文件名不允许的特殊字符。_screenshot是Robot Framework内部监听方法,框架生成截图(包括关键字失败自动触发的截图)时会调用此方法,我们在这里将默认的selenium-screenshot前缀替换为{测试名}-screen,框架会自动使用修改后的路径保存截图。
注意事项
- 确保Listener文件路径正确,若测试文件和Listener不在同一目录,可将Listener所在目录添加到Python环境变量
PYTHONPATH,或直接写绝对路径。 - 可根据需求调整测试名称的字符替换规则,避免生成无效文件名。
- 该方案会覆盖所有未指定文件名的截图(包括主动调用
Capture Page Screenshot但未传参的情况),如需区分主动/自动截图,可在_screenshot方法中增加逻辑判断。
内容的提问来源于stack exchange,提问作者badbadllama
相关产品推荐
相关产品推荐

