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

如何解决‘ImportError: No module named marionette_test’及Marionette会话异常

解决Marionette启动会话时的UnknownCommandException问题

你在使用Marionette驱动连接移动设备时遇到的这个异常,大概率是版本兼容、设备配置或会话初始化方式出了问题,我来分享几个实用的排查和解决思路:

1. 先搞定版本匹配问题

UnknownCommandException最常见的诱因就是marionette_driver客户端版本和设备上Firefox(或GeckoView)的服务端版本不兼容——不同版本的Firefox对Marionette命令集的支持差异很大。建议:

  • 先查看设备上Firefox的具体版本(打开Firefox → 设置 → 关于Firefox)
  • 安装对应大版本的marionette_driver:
    pip install marionette_driver==<对应版本号>
    
    比如设备上是Firefox 115.x,就安装marionette_driver==115.*的版本。

2. 确认设备端Marionette服务已正确开启

手机上的Firefox必须开启调试模式,才能被Marionette客户端连接:

  • 打开设备上的Firefox,输入about:config,接受风险提示
  • 搜索并将以下两个参数设置为true:
    • marionette.enabled
    • devtools.debugger.remote-enabled
  • 重启Firefox使设置生效
  • 最后通过adb转发端口(Marionette默认监听设备的2828端口):
    adb forward tcp:2828 tcp:2828
    

3. 显式指定设备Capabilities

有时候直接调用start_session()缺少必要的设备上下文信息,导致服务端无法识别命令。可以尝试添加Android设备专属的Capabilities:

from marionette_driver import By
from marionette_driver import Wait
from marionette import Marionette
from marionette_driver import DesiredCapabilities

# 配置设备专属Capabilities
caps = DesiredCapabilities.FIREFOX.copy()
caps["marionette"] = True
caps["platformName"] = "Android"
caps["deviceName"] = "你的设备名称"  # 可通过`adb devices`命令获取设备标识

# 初始化客户端并启动会话
client = Marionette('localhost', port=2828, capabilities=caps)
client.start_session()

4. 检查端口是否被占用

如果本地2828端口被其他进程占用,也会导致连接异常:

  • Mac/Linux下查看端口占用:
    lsof -i :2828
    
  • Windows下查看端口占用:
    netstat -ano | findstr :2828
    

杀掉占用端口的进程后,重新尝试连接即可。

调试加分项:开启详细日志

如果以上方法都没解决问题,可以开启Marionette的调试日志,获取客户端与服务端的交互细节,方便定位具体是哪个命令不被支持:

client = Marionette('localhost', port=2828, log_level="debug")
client.start_session()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:53:15