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

Docker环境下Robot Framework+Sikuli报AttributeError问题求助

Docker中Robot Framework结合Sikuli UI自动化测试报错排查

我在Docker环境使用Robot Framework结合Sikuli进行UI自动化测试,本地Windows环境测试可正常通过,但在Docker中运行时,所有测试用例及Suite Teardown均报错:AttributeError: 'NoneType' object has no attribute 'run_keyword'。以下是相关文件及报错信息,请求帮忙排查问题。

Dockerfile

FROM python:3.8-slim-buster

# Update packages and install dependencies

RUN apt-get update && apt-get install -y \
    wget \
    openjdk-11-jre-headless \
    && rm -rf /var/lib/apt/lists/*

# Install Robot Framework and Sikuli library
RUN pip install robotframework
RUN pip install robotframework-SikuliLibrary

# Download and install SikuliX
RUN wget https://launchpad.net/sikuli/sikulix/2.0.4/+download/sikulixide-2.0.4.jar  -O /root/sikulix.jar


# Set environment variables for SikuliX
ENV JAVA_HOME /usr/lib/jvm/java-11-openjdk-amd64/
ENV SIKULIX_HOME /root
ENV SIKULIX_JAR /root/sikulix.jar

# Copy test files into the container
COPY . /tests

# Set working directory
WORKDIR /tests

# Execute tests with Robot Framework
CMD ["robot", "--outputdir", "results", "test.robot"]

测试脚本

*** Settings ***
Documentation     Test d'IHM par sikuli et robot framework
Library    SikuliLibrary    port=4119   timeout=3.0    mode=REMOTE
Library    Process
Library    OperatingSystem
Suite Setup     Start Sikuli Process  
Suite Teardown   Run Keywords    Close Application     ${APP_PATH}    AND   Stop Remote Server

*** Variables ***
${IMAGES_PATH}        //tests/SikuliImages
${APP_PATH}           //tests/FHF_App.exe

***Test Cases***
Open IHM
    Open IHM Application
Read Images
   Read Images From Path
Navigate IHM Application Buttons
    Navigate Buttons
*** Keywords ***
Start Sikuli Process
    ${port}=    Set Environment Variable    SIKULI_SERVER_PORT    4119  # Port souhaité, par exemple 4119
    Run    java -jar sikulix.jar -p ${port}    
    Sleep    3s  # Attendre que le processus Sikuli démarre
Read Images From Path 
     Add Image Path    ${IMAGES_PATH}
Open IHM Application
    Open Application    ${APP_PATH}
Navigate Buttons
     
    Wait Until Screen Contain     pauseButtonPull.png   timeout=30
    Click    pauseButtonPull.png
    Wait Until Screen Contain     pausePanel.png    timeout=40 
    
    Click    pauseButtonDown.png
    Click    PexpButtonPull.png
    Wait Until Screen Contain    PexpPanel.png    timeout=10
    Click    PexpButtonDown.png

报错信息

Test :: Test d'IHM par sikuli et robot framework
Open IHM | FAIL |
AttributeError: 'NoneType' object has no attribute 'run_keyword'
Read Images | FAIL |
AttributeError: 'NoneType' object has no attribute 'run_keyword'
Navigate IHM Application Buttons | FAIL |
AttributeError: 'NoneType' object has no attribute 'run_keyword'
Test :: Test d'IHM par sikuli et robot framework | FAIL |
Suite teardown failed:
Several failures occurred:

AttributeError: 'NoneType' object has no attribute 'run_keyword'

AttributeError: 'NoneType' object has no attribute 'run_keyword'

3 tests, 0 passed, 3 failed

问题排查及解决方案

1. 核心:Windows程序无法在Linux容器运行

测试目标FHF_App.exe是Windows可执行文件,当前Docker镜像基于Linux(python:3.8-slim-buster),Linux无法直接运行Windows exe程序,这是所有操作失败的根本原因之一。

  • 可选解决方向:
    • 使用Windows Docker镜像作为基础镜像,在Windows容器中运行测试;
    • 在Linux容器中安装Wine来模拟Windows环境运行exe;
    • 调整架构:将Sikuli服务部署在Windows主机上,Docker中的Robot Framework通过远程模式连接该服务执行测试。

2. Sikuli无头环境缺失图形支持

Sikuli依赖图形界面进行屏幕捕获,当前Docker镜像未安装X11相关组件,导致Sikuli服务启动失败,SikuliLibrary无法连接到有效服务实例,触发NoneType错误。

  • 修改Dockerfile,添加X11依赖:
    RUN apt-get update && apt-get install -y \
        wget \
        openjdk-11-jre-headless \
        xvfb \
        x11vnc \
        libx11-dev \
        libxtst-dev \
        libpng-dev \
        && rm -rf /var/lib/apt/lists/*
    
  • 修改Start Sikuli Process关键字,启动虚拟图形环境:
    Start Sikuli Process
        ${port}=    Set Environment Variable    SIKULI_SERVER_PORT    4119
        # 启动虚拟X服务器
        Run    Xvfb :1 -screen 0 1920x1080x24 &
        Set Environment Variable    DISPLAY    :1
        # 启动Sikuli服务
        Run    java -jar ${SIKULIX_JAR} -p ${port}    
        # 等待服务就绪(需导入Telnet库)
        Wait Until Keyword Succeeds    10x    2s    Telnet.Ping    localhost    ${port}
    
  • 在测试脚本的Settings部分添加Library Telnet。

3. 路径格式错误

测试脚本中使用Windows风格的双斜杠路径//tests/...,在Linux环境下应改为单斜杠/tests/...,否则会导致路径解析失败:

*** Variables ***
${IMAGES_PATH}        /tests/SikuliImages
${APP_PATH}           /tests/FHF_App.exe  # 注意:此exe仍需解决Linux运行问题

4. Suite Teardown异常处理

当Sikuli服务未正常启动时,Teardown中的关键字调用会因SikuliLibrary实例为None而报错。可添加异常捕获,避免Teardown报错:

Suite Teardown   Run Keywords    ${TRY}    Close Application     ${APP_PATH}    ${EXCEPT}    Log    Close Application failed     WARN    ${END}    AND    ${TRY}    Stop Remote Server    ${EXCEPT}    Log    Stop Remote Server failed     WARN    ${END}

需要先导入BuiltIn库,在Settings里加Library BuiltIn,并定义TRY/EXCEPT/END变量:

*** Variables ***
${TRY}    Run Keyword And Continue On Failure
${EXCEPT}    Run Keyword And Continue On Failure
${END}    # 占位符

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 20:52:18