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

如何在Robot Framework中读取请求响应?求类似cypress.intercept()的方案

在Robot Framework中实现类似Cypress intercept()的API请求捕获功能

完全可以实现,目前有两种主流方案,分别适配不同的测试库场景:

方案一:使用Browser库(推荐)

Browser库基于Playwright开发,原生支持网络请求的拦截、监听与响应提取,语法逻辑和Cypress的intercept()高度对齐,上手成本低。

步骤与示例代码

  1. 先安装库并初始化:
pip install robotframework-browser
rfbrowser init
  1. 对应你提供的Cypress代码,Robot Framework实现如下:
*** Settings ***
Library    Browser

*** Test Cases ***
捕获登录API响应并验证
    # 启动浏览器并打开页面
    New Browser    headless=False
    New Page    https://你的登录页面地址.com

    # 设置请求拦截规则:匹配POST请求,路径包含/login,设置别名方便后续引用
    Intercept Request    POST    **/login    alias=login-request

    # 执行UI操作触发登录请求(比如输入账号密码后点击登录按钮)
    Input Text    //input[@id='username']    test_user
    Input Text    //input[@id='password']    test_pass
    Click    //button[@type='submit']

    # 等待拦截的请求完成,获取完整的拦截对象
    ${intercept}=    Wait For Intercept    login-request    timeout=30s

    # 提取响应状态码与响应体
    ${status_code}=    Get From Dictionary    ${intercept.response}    status
    ${response_body}=    Get From Dictionary    ${intercept.response}    body

    # 验证响应结果
    Should Be Equal    ${status_code}    200
    Should Not Be Empty    ${response_body.idToken}

    # 将token保存为测试变量,供后续用例使用
    Set Test Variable    ${idToken}    ${response_body.idToken}

方案二:SeleniumLibrary结合DevTools协议

如果你的项目已经在使用SeleniumLibrary 4.x及以上版本,可以借助Chrome/Edge浏览器的DevTools协议捕获网络请求。这种方案需要手动处理DevTools命令,相对繁琐但兼容性好。

示例代码

*** Settings ***
Library    SeleniumLibrary

*** Test Cases ***
通过DevTools捕获登录API
    # 启动Chrome浏览器并打开登录页
    Open Browser    https://你的登录页面地址.com    chrome
    ${driver}=    Get WebDriver

    # 启用DevTools的网络监控
    Call Method    ${driver}    execute_cdp_cmd    Network.enable    {}

    # 定义响应捕获的回调逻辑:只监听包含/login的POST请求
    Call Method    ${driver}    execute_cdp_cmd    Network.responseReceived    """
    {
        "listener": (response) => {
            const req = response.request;
            if (req.method === 'POST' && req.url.includes('/login')) {
                window.loginResponse = response;
            }
        }
    }
    """

    # 执行UI操作触发登录
    Input Text    //input[@id='username']    test_user
    Input Text    //input[@id='password']    test_pass
    Click    //button[@type='submit']

    # 等待响应被捕获(最多等待30秒,每秒检查一次)
    Wait Until Keyword Succeeds    30s    1s    Run Keyword And Return Status    Evaluate    window.loginResponse !== undefined

    # 提取响应数据
    ${raw_response}=    Evaluate    window.loginResponse
    ${status_code}=    Get From Dictionary    ${raw_response}    status
    ${response_body}=    Evaluate    JSON.parse(arguments[0].body)    ${raw_response}

    # 验证并保存token
    Should Be Equal    ${status_code}    200
    Should Not Be Empty    ${response_body.idToken}
    Set Test Variable    ${idToken}    ${response_body.idToken}

    # 关闭网络监控
    Call Method    ${driver}    execute_cdp_cmd    Network.disable    {}
    Close Browser

方案对比

  • Browser库:语法简洁,和Cypress的intercept()逻辑几乎一致,支持请求修改、响应篡改等进阶功能,适合新项目或愿意切换测试库的场景。
  • Selenium+DevTools:无需更换现有测试栈,但需要熟悉DevTools命令,代码量更大,适合已有Selenium项目的适配需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 00:38:13