如何在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
相关产品推荐
相关产品推荐

