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

Docker Bamboo代理中Robot Framework+Selenium无法下载JSON文件

Robot Framework测试下载文件失败问题解决

报错信息

关键字'File Should Exist'重试10次后失败。
最后一次错误信息:文件'/tmp/downloads/importResults.json'不存在。

背景信息

  • 测试在Docker(docker-compose)部署的Bamboo代理环境中运行
  • DOWNLOAD_DIR配置为/tmp/downloads,已从主机挂载到容器内部
  • 测试执行完成后,容器内及主机上的该目录均为空
  • 根因:Chrome默认将JSON响应在页面内打开而非触发下载,仅配置download.default_directory不足以改变这一行为

修复方案

更新login.resource文件,扩展Chrome偏好设置,添加强制下载JSON文件的配置:

Login into Site with User and Password
    [Documentation]     打开站点并使用指定凭据登录(无SSO)
    [Arguments]     ${username}     ${password}     ${MFA_KEY}
        ${BROWSER_TYPE_DEFINED}          Get Variable Value    ${BROWSER_TYPE}
        # 如果设置了DOWNLOAD_DIR(比如Bamboo代理环境变量)则使用,否则默认用EXECDIR(本地执行目录)
        ${DOWNLOAD_DIR} =    Get Variable Value    ${DOWNLOAD_DIR}    ${EXECDIR}
        Set Suite Variable    ${DOWNLOAD_DIR}    ${DOWNLOAD_DIR}
        # 新增配置:强制Chrome下载JSON文件,而非在页面打开
        ${prefs}=    Create Dictionary    download.default_directory=${DOWNLOAD_DIR}
        ...    download.prompt_for_download=False
        ...    download.directory_upgrade=True
        ...    plugins.always_open_pdf_externally=True
        ...    plugins.plugins_list=[{"enabled":False,"name":"Chrome PDF Viewer"}]
        ...    text/json=${DOWNLOAD_DIR}
        ...    application/json=${DOWNLOAD_DIR}
        IF  "${BROWSER_TYPE_DEFINED}" == "CI"
            Open Browser   ${URL}   Headless Chrome     options=add_experimental_option('excludeSwitches', ['enable-logging']);add_experimental_option('prefs', ${prefs});add_argument('--headless');add_argument('--no-sandbox');add_argument('--disable-dev-shm-usage')   remote_url=${BrowserServers["CI"]}
        ELSE
            Open Browser    ${URL}   ${Browsers["${Browser}"]}     options=add_experimental_option('excludeSwitches', ['enable-logging']);add_experimental_option('prefs', ${prefs})
        END
        Set Default Browser Window Size
        Set Global Script Timeout

相关配置文件

Bamboo脚本代码

注:原配置中bamboo.DOWNLOAD_DIR存在拼写错误/tmp/downlodas,已修正为/tmp/downloads

export TOTAL_AGENTS_COUNT=${bamboo.TOTAL_AGENTS_COUNT}
export MFA_KEY=${bamboo.AGENT0_MFA_KEY_ADMIN}
export DOWNLOAD_DIR=${bamboo.DOWNLOAD_DIR}
echo "here: $MFA_KEY"
echo "--suite xray-settings-graphql" > scripts/run_test.cfg
echo 'List of suites in current run_config_process_1.cfg file:'
cat scripts/run_config_process_1.cfg
echo 'Run Tcs'
ls -ld /tmp/downloads
echo "hello" > /tmp/downloads/testfile.txt
cat /tmp/downloads/testfile.txt


robot \
  -o output/output.xml \
  -l output/log.html \
  -r output/report.html \
  --argumentfile scripts/run_test.cfg \
  --variable BROWSER_TYPE:CI \
  --variable DOWNLOAD_DIR:$DOWNLOAD_DIR \
  --metadata "1. Run: 1-st thread from scripts/run_test.cfg" \
  tests

docker-compose.yml

version: '3.8'

services:
  postgres:
    image: postgres:10.20
    container_name: bamboo-postgres
    ports:
      - "5432:5432"
    environment:
      POSTGRES_DB: bamboo
      POSTGRES_USER: bamboo
      POSTGRES_PASSWORD: bamboo123
    volumes:
      - postgres_data:/var/lib/postgresql/data
    networks:
      - bamboo-network

  bamboo:
    build:
      context: .
      dockerfile: Dockerfile.bamboo-server
    container_name: bamboo-server
    ports:
      - "8085:8085"
      - "54663:54663"
    environment:
      - BAMBOO_HOME=/var/atlassian/application-data/bamboo
      - JAVA_OPTS=-Dbamboo.agent.auto.approve.remote.agents=true -Dbamboo.jms.broker.uri=tcp://bamboo:54663
    volumes:
      - bamboo_home:/var/atlassian/application-data/bamboo
    depends_on:
      - postgres
    networks:
      - bamboo-network
    mem_limit: 2g

  selenium-hub:
    image: selenium/hub:4.21.0
    container_name: selenium-hub
    ports:
      - "4445:4444"
    environment:
      - GRID_TIMEOUT=600
      - GRID_BROWSER_TIMEOUT=600
    networks:
      - bamboo-network

  chrome-node-1:
    image: selenium/node-chrome:4.21.0
    container_name: chrome-node-1
    shm_size: 2g
    depends_on:
      - selenium-hub
    environment:
      - SE_EVENT_BUS_HOST=selenium-hub
      - SE_EVENT_BUS_PUBLISH_PORT=4442
      - SE_EVENT_BUS_SUBSCRIBE_PORT=4443
      - SE_NODE_MAX_SESSIONS=1
      - SE_SESSION_TIMEOUT=600
    volumes:
      - ./bamboo-agents/agent1/downloads:/tmp/downloads
    networks:
      - bamboo-network

  chrome-node-2:
    image: selenium/node-chrome:4.21.0
    container_name: chrome-node-2
    shm_size: 2g
    depends_on:
      - selenium-hub
    environment:
      - SE_EVENT_BUS_HOST=selenium-hub
      - SE_EVENT_BUS_PUBLISH_PORT=4442
      - SE_EVENT_BUS_SUBSCRIBE_PORT=4443
      - SE_NODE_MAX_SESSIONS=1
      - SE_SESSION_TIMEOUT=600
    volumes:
      - ./bamboo-agents/agent2/downloads:/tmp/downloads
    networks:
      - bamboo-network

  chrome-node-3:
    image: selenium/node-chrome:4.21.0
    container_name: chrome-node-3
    shm_size: 2g
    depends_on:
      - selenium-hub
    environment:
      - SE_EVENT_BUS_HOST=selenium-hub
      - SE_EVENT_BUS_PUBLISH_PORT=4442
      - SE_EVENT_BUS_SUBSCRIBE_PORT=4443
      - SE_NODE_MAX_SESSIONS=1
      - SE_SESSION_TIMEOUT=600
    volumes:
      - ./bamboo-agents/agent3/downloads:/tmp/downloads
    networks:
      - bamboo-network

  chrome-node-4:
    image: selenium/node-chrome:4.21.0
    container_name: chrome-node-4
    shm_size: 2g
    depends_on:
      - selenium-hub
    environment:
      - SE_EVENT_BUS_HOST=selenium-hub
      - SE_EVENT_BUS_PUBLISH_PORT=4442
      - SE_EVENT_BUS_SUBSCRIBE_PORT=4443
      - SE_NODE_MAX_SESSIONS=1
      - SE_SESSION_TIMEOUT=600
    volumes:
      - ./bamboo-agents/agent4/downloads:/tmp/downloads
    networks:
      - bamboo-network

  chrome-node-5:
    image: selenium/node-chrome:4.21.0
    container_name: chrome-node-5
    shm_size: 2g
    depends_on:
      - selenium-hub
    environment:
      - SE_EVENT_BUS_HOST=selenium-hub
      - SE_EVENT_BUS_PUBLISH_PORT=4442
      - SE_EVENT_BUS_SUBSCRIBE_PORT=4443
      - SE_NODE_MAX_SESSIONS=1
      - SE_SESSION_TIMEOUT=600
    volumes:
      - ./bamboo-agents/agent5/downloads:/tmp/downloads
    networks:
      - bamboo-network

  bamboo-agent-1:
    build:
      context: .
      dockerfile: Dockerfile.bamboo-agents
    container_name: bamboo-agent-1
    environment:
      - BAMBOO_SERVER=http://bamboo:8085
      - AGENT_NAME=agent1
      - TOTAL_AGENTS_COUNT=5
    volumes:
      - ./bamboo-agents/agent1:/opt/bamboo-agents
      - /etc/localtime:/etc/localtime:ro
      - ./bamboo-agents/agent1/downloads:/tmp/downloads
    depends_on:
      - bamboo
      - selenium-hub
      - chrome-node-1
    networks:
      - bamboo-network
    mem_limit: 1g

  bamboo-agent-2:
    build:
      context: .
      dockerfile: Dockerfile.bamboo-agents
    container_name: bamboo-agent-2
    environment:
      - BAMBOO_SERVER=http://bamboo:8085
      - AGENT_NAME=agent2
      - TOTAL_AGENTS_COUNT=5
    volumes:
      - ./bamboo-agents/agent2:/opt/bamboo-agents
      - /etc/localtime:/etc/localtime:ro
      - ./bamboo-agents/agent2/downloads:/tmp/downloads
    depends_on:
      - bamboo
      - selenium-hub
      - chrome-node-2
    networks:
      - bamboo-network
    mem_limit: 1g

  bamboo-agent-3:
    build:
      context: .
      dockerfile: Dockerfile.bamboo-agents
    container_name: bamboo-agent-3
    environment:
      - BAMBOO_SERVER=http://bamboo:8085
      - AGENT_NAME=agent3
      - TOTAL_AGENTS_COUNT=5
    volumes:
      - ./bamboo-agents/agent3:/opt/bamboo-agents
      - /etc/localtime:/etc/localtime:ro
      - ./bamboo-agents/agent3/downloads:/tmp/downloads
    depends_on:
      - bamboo
      - selenium-hub
      - chrome-node-3
    networks:
      - bamboo-network
    mem_limit: 1g

  bamboo-agent-4:
    build:
      context: .
      dockerfile: Dockerfile.bamboo-agents
    container_name: bamboo-agent-4
    environment:
      - BAMBOO_SERVER=http://bamboo:8085
      - AGENT_NAME=agent4
      - TOTAL_AGENTS_COUNT=5
    volumes:
      - ./bamboo-agents/agent4:/opt/bamboo-agents
      - /etc/localtime:/etc/localtime:ro
      - ./bamboo-agents/agent4/downloads:/tmp/downloads
    depends_on:
      - bamboo
      - selenium-hub
      - chrome-node-4
    networks:
      - bamboo-network
    mem_limit: 1g

  bamboo-agent-5:
    build:
      context: .
      dockerfile: Dockerfile.bamboo-agents
    container_name: bamboo-agent-5
    environment:
      - BAMBOO_SERVER=http://bamboo:8085
      - AGENT_NAME=agent5
      - TOTAL_AGENTS_COUNT=5
    volumes:
      - ./bamboo-agents/agent5:/opt/bamboo-agents
      - /etc/localtime:/etc/localtime:ro
      - ./bamboo-agents/agent5/downloads:/tmp/downloads
    depends_on:
      - bamboo
      - selenium-hub
      - chrome-node-5
    networks:
      - bamboo-network
    mem_limit: 1g

volumes:
  bamboo_home:
  postgres_data:

networks:
  bamboo-network:
    driver: bridge

Dockerfile.agents

FROM openjdk:8-jdk

ENV BAMBOO_SERVER=http://bamboo:8085
ENV AGENT_NAME=agent1

RUN apt-get update && \
    apt-get install -y curl python3 python3-pip python3-tk nano ntpdate && \
    ln -s /usr/bin/python3 /usr/bin/python && \
    pip3 install \
        robotframework==5.0.1 \
        robotframework-seleniumlibrary \
        robotframework-datadriver \
        robotframework-requests \
        pyotp \
        robotframework-jsonlibrary && \
    rm -rf /var/lib/apt/lists/*


RUN mkdir -p /opt/bamboo-agents
WORKDIR /opt/bamboo-agents

COPY start-agents.sh /start-agents.sh
RUN chmod +x /start-agents.sh

CMD ["/start-agents.sh"]

start-agents.sh

echo "Starting Bamboo agent: $AGENT_NAME..."

AGENT_HOME="/opt/bamboo-agents"
DOWNLOADS_DIR="/tmp/downloads"

mkdir -p "$AGENT_HOME"
mkdir -p "$DOWNLOADS_DIR"
chmod 777 "$DOWNLOADS_DIR"
cd "$AGENT_HOME"

# Remove old config to ensure fresh UUID
# rm -f bamboo-agent.cfg.xml

echo "Downloading $AGENT_NAME installer..."
curl -s -O "${BAMBOO_SERVER}/agentServer/agentInstaller/atlassian-bamboo-agent-installer-8.2.6.jar"

echo "Starting $AGENT_NAME..."
java -Dbamboo.home=$AGENT_HOME -Dbamboo.server.broker.url=tcp://bamboo:54663?wireFormat.maxInactivityDuration=300000 -jar atlassian-bamboo-agent-installer-8.2.6.jar "${BAMBOO_SERVER}/agentServer/" &


wait

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 10:47:01