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

Robot Framework+Appium测试录屏求助:遇无效会话ID错误

解决Robot Framework + Appium iOS测试录屏的Invalid Session ID问题

我之前做Appium+Robot Framework的iOS自动化测试时也踩过类似的坑,你遇到的核心问题是自定义库中的全局driver实例和Robot测试会话不匹配,导致调用录屏API时触发无效会话ID错误。下面给你分享具体的解决思路和修正方案:

问题根源分析

你代码里的driver是在库的全局作用域初始化的,但Robot Framework的测试流程中,Appium会话应该是在测试用例内部通过Open Application关键字启动的。库加载时初始化的driver早就在测试会话开始前失效了,或者根本和当前测试的会话不是同一个实例,所以调用start_recording_screen()时自然会报NoSuchDriverError。

修正后的自定义库代码

正确的做法是动态获取Robot Framework中AppiumLibrary维护的当前有效driver实例,而不是自己全局初始化。下面是修改后的代码:

import os
import base64
from robot.api import logger
from robot.libraries.BuiltIn import BuiltIn

def start_screen_recording():
    # 从AppiumLibrary中获取当前活跃的应用driver
    appium_lib = BuiltIn().get_library_instance('AppiumLibrary')
    current_driver = appium_lib._current_application()
    # 启动录屏(iOS平台Appium会自动处理录屏逻辑)
    current_driver.start_recording_screen()
    logger.info("Screen recording started successfully")

def stop_screen_recording(filename="screen_recording.mp4"):
    # 同样获取当前有效driver
    appium_lib = BuiltIn().get_library_instance('AppiumLibrary')
    current_driver = appium_lib._current_application()
    
    # 优先使用Robot内置的输出目录变量,更灵活适配不同环境
    output_dir = BuiltIn().get_variable_value('${OUTPUT_DIR}') 
    if not output_dir:
        output_dir = "/Users/keo.sidara/Desktop/Mobile_Test/testcases/regression"
    
    filepath = os.path.join(output_dir, filename)
    logger.info(f"Preparing to save recording to: {filepath}")
    
    # 停止录屏并解码保存为MP4文件
    recording_payload = current_driver.stop_recording_screen()
    with open(filepath, "wb") as file:
        file.write(base64.b64decode(recording_payload))
    
    logger.info(f"Screen recording saved to: {filepath}")

测试用例中的使用方式

在Robot测试用例里,你需要先通过AppiumLibrary启动会话,再调用自定义库的录屏方法,示例如下:

*** Settings ***
Library    AppiumLibrary
Library    CustomScreenRecordingLibrary  # 导入你的自定义录屏库

*** Test Cases ***
Demo Screen Recording Test
    # 先启动Appium会话(参数根据你的设备/应用实际情况调整)
    Open Application    http://localhost:4723/wd/hub 
    ...    platformName=iOS
    ...    platformVersion=12.3.2
    ...    bundleId=xxxxxx
    ...    udid=xxxxxxx
    ...    deviceName=iPhone
    
    # 开始录屏
    Start Screen Recording
    
    # 执行你的测试步骤(示例:点击元素、输入文本)
    Click Element    id=test_button
    Input Text    id=test_input    hello@example.com
    
    # 停止录屏,用测试名称+时间戳命名避免文件覆盖
    Stop Screen Recording    screen_recording_${TEST NAME}_${TIMESTAMP}.mp4
    
    # 关闭应用会话
    Close Application

额外排查要点

  1. Appium服务状态:确保运行测试前已经启动Appium服务(终端执行appium命令,确认没有报错信息)。
  2. 版本兼容性:iOS 12.3.2建议搭配Appium 1.22.x版本(过高或过低的Appium版本可能和iOS版本不兼容,导致会话异常)。
  3. 设备权限:确认你的测试设备已经信任电脑,并且Appium能正常识别到设备(可以用idevice_id -l命令检查udid是否正确)。

内容的提问来源于stack exchange,提问作者Sidara KEO

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 13:27:47