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

如何在Robot Framework中实现Selenium Grid文件下载及获取节点详情?

在Robot Framework + Selenium Grid环境中实现文件下载及获取节点信息

刚好之前做过类似的场景,来给你梳理下可行的方案和获取节点信息的方法:

一、实现文件下载的几种方案

方案1:通过SCP传输已下载文件(你提到的可行方案)

如果已经能定位到测试节点,Robot Framework可以借助SSHLibrary来完成SCP文件传输,步骤很直观:

  • 提前确保测试节点开启SSH服务,且执行测试的机器有该节点的SSH访问权限
  • 在测试用例中导入SSHLibrary,连接节点后拉取文件

示例代码:

*** Settings ***
Library    SSHLibrary
Library    SeleniumLibrary

*** Test Cases ***
Fetch Downloaded File via SCP
    # 连接到Selenium Grid Hub,启动远程浏览器会话
    Open Browser    https://your-test-site.com    chrome    remote_url=http://your-grid-hub:4444/wd/hub
    # 执行下载操作(比如点击页面上的下载按钮)
    Click Button    id=download-button
    # 获取当前会话所在节点的信息(后面会讲怎么实现这个关键字)
    ${node_details}    Get Remote Node Info
    ${node_ip}    Get From Dictionary    ${node_details}    host
    # 连接到测试节点,拉取下载的文件到本地
    Open Connection    ${node_ip}    username=your-ssh-user    password=your-ssh-pass
    Get File    /path/to/node/downloads/target-file.zip    /local/test-dir/saved-file.zip
    Close Connection
    # 后续可以验证文件完整性等操作
    File Should Exist    /local/test-dir/saved-file.zip
    Close Browser

方案2:配置共享下载目录(更高效的无传输方案)

如果你的测试环境支持共享存储(比如NFS、SMB挂载),可以直接在启动Selenium节点时,配置浏览器的默认下载目录为共享目录。这样文件下载后直接存到共享路径,测试机无需跨节点传输就能访问。

比如启动Chrome节点的命令:

java -jar selenium-server-4.15.0.jar node \
    --hub http://your-grid-hub:4444 \
    --capabilities "browserName=chrome,goog:chromeOptions={prefs={download.default_directory='/shared/test-downloads'}}"

这种方式省去了SCP的步骤,测试用例里直接操作/shared/test-downloads目录下的文件即可,效率更高。

二、如何在Robot Framework中获取Selenium Grid节点的详细信息

Selenium Grid的Hub提供了REST API,我们可以用RequestsLibrary调用这个API,结合当前会话的ID来定位到对应的节点信息(包括IP、端口、浏览器版本、操作系统等)。

实现步骤及示例代码

*** Settings ***
Library    RequestsLibrary
Library    SeleniumLibrary
Library    Collections

*** Keywords ***
Get Remote Node Info
    # 获取当前测试会话的ID
    ${session_id}    Get Session Id
    # 调用Grid Hub的status接口,获取所有节点及会话信息
    ${response}    Get Request    http://your-grid-hub:4444/wd/hub/status
    # 将返回的响应转为JSON格式
    ${grid_status}    To Json    ${response.content}
    # 遍历所有节点,找到当前会话所属的节点
    :FOR    ${node}    IN    @{grid_status.value.nodes}
    \    :FOR    ${session}    IN    @{node.sessions}
    \    \    Run Keyword If    '${session.sessionId}' == '${session_id}'    Return From Keyword    ${node}
    # 如果未匹配到对应节点,返回空字典或抛出错误
    Return From Keyword    ${EMPTY_DICT}

关键说明

  • 接口路径:Selenium 4的Hub默认用/wd/hub/status,如果是Selenium 3,接口路径是/grid/api/hub,需要根据你的Grid版本调整
  • 节点信息字段:返回的节点字典中,host字段就是节点的IP地址,另外还能拿到port、osInfo(操作系统信息)、browserName等有用数据
  • 权限:确保执行测试的机器可以访问Grid Hub的API端口(默认4444)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 09:10:54