看起来类似于机器人框架中的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);
}
);
要在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 拦截等内置解决方案那么简单。