如何读取机器人硒中请求的响应

问题描述 投票:0回答:1

看起来类似于机器人框架中的cypress.intercept(),我们从 UI 读取已经发生的 get 和 post 请求的 api 响应,无需额外调用。没有找到任何合适的文档,因此发布此内容以了解机器人或任何辅助库是否可以做到这一点。

cy.intercept('POST', '**/login').as('login-request');

cy.wait('@login-request', { responseTimeout: TIME_OUT.pageLoad }).then(
    (intercept) => {
      const { statusCode, body } = intercept.response;
      expect(statusCode).to.eq(200);
      expect(body).property('idToken').to.not.be.oneOf([null, undefined]);
      Cypress.env('idToken', body.idToken);
    }
  );
python selenium-webdriver automation robotframework ui-automation
1个回答
0
投票

要在Robot Framework中实现类似于Cypress的

cy.intercept()
的功能,您可以使用具有更高级功能的
Browser
库,或者您可以结合使用
SeleniumLibrary
和Python的
requests
库来处理API请求。

如果想要捕获网络流量,Robot Framework 本身并没有像 Cypress 那样内置拦截网络调用的功能。但是,您可以将

Browser
库与 Playwright 后端一起使用来拦截和修改 HTTP 请求和响应。

尝试这样的事情:

  • 安装库
pip install robotframework-browser
rfbrowser init
  • 然后,使用浏览器库拦截网络请求
*** Settings ***
Library    Browser

*** Variables ***
${URL}    https://example.com/login

*** Test Cases ***
Intercept Login Request
    New Browser    headless=false
    New Context
    New Page    ${URL}
    Intercept Network    POST    **/login    CaptureLoginResponse
    Click    //button[@id='login']
    Wait For Condition    'response_captured'

*** Keywords ***
CaptureLoginResponse
    [Arguments]    ${request}
    IF    '${request.method}' == 'POST'
        Set Test Variable    ${response_captured}    ${request.response.body}
    END

此示例打开浏览器并为登录请求设置网络拦截器。关键字

CaptureLoginResponse
用于捕获并处理拦截的网络调用的响应。

如果您仅限于使用

SeleniumLibrary
并且无法使用
Browser
库,则必须依赖使用浏览器开发人员工具或
mitmproxy
等外部代理来捕获请求,但这种方法需要更多设置,并且不适合不像使用 Cypress 拦截等内置解决方案那么简单。

© www.soinside.com 2019 - 2024. All rights reserved.