我是柏树新手。 问题:当控制台 -> 网络选项卡中出现多个 API 时,我无法拦截 API 模拟的 url
描述:我的需求如下:
https://externalAPIurl
)复制到下面的代码中//verify landing page is reached
cy.contains("this is landing page").should("exist");
//after login open testcase page
cy.visit(
"https://example.com/testcases"
);
//go to test suite tab test suite
cy.get("#testsuiteid")
.click();
//click test suite name
cy.contains("testsuitename").click();
// select all test cases
cy.get(".testcasecheckbox")
.click();
cy.intercept(
{
method: "GET",
url: "https://externalAPIurl",
},
{
headers: {
authorization:
"AABBXXYY",
},
},
{
statusCode: 200,
body: [
{
status: 200,
result: true,
combination: [
//same data...
],
},
],
}
);
cy.get("#run_button").click();
});
我哪里错了?
我使用 Get 方法和 Header-> Authorization key 检查了邮递员、URL,并具有正确的授权密钥值(从网络控制台标头收集),给出了正确的响应,但 cy.intercept 抛出错误
如何解决这个问题? 每当我们在网站中单击按钮时,控制台->网络中都会显示多个外部 API。如果我采用其中任何一个 -> 检查 URL、方法、标头并在邮递员中获得与网络控制台中相同的响应,我应该能够模拟相同的请求 URL。 当网络控制台中出现一个 API 时,我尝试了相同的操作。很好。但是当我从多个中选择一个时,结果是错误的。
请注意:我已包含标题授权,可能格式错误。但如果我给予或不给予授权,结果都是同样的错误。
如果您想拦截“GET”并使用预定义数据存根响应。我首先会使用开发工具网络选项卡来捕获您想要的 api 响应。复制响应并在固定文件夹中另存为 json 文件(您可以根据需要编辑此文件,以按照您希望的方式伪造数据)。从那里您可以执行以下操作:
cy.fixture('apiResponse.json').as('fixture data')
.then( (data) =>{
const raw = JSON.stringify(data)
cy.request( {
method : 'GET',
url : 'api url here',
headers : {
authorization : 'AABBXXYY',
},
body : raw
})
.then( (response) => {
cy.log(response.body)
expect(`Response.status = ${response.status}`).to.eq('Response.status = 200')
})
})