点击发送请求时出现 Cypress 400 XHR 错误
Posted
技术标签:
【中文标题】点击发送请求时出现 Cypress 400 XHR 错误【英文标题】:Cypress 400 XHR error when clicking to send a request 【发布时间】:2021-05-13 09:51:30 【问题描述】:我已经与 cypress 合作了一天。我有一个按钮,一旦你点击它就会刷新页面,之后的一些测试仍然会通过。
单击此按钮将引发 400 错误。 (发帖请求)
我可以点击页面上的其他按钮,也可以在浏览器的新标签页中手动完成。但是一旦测试自动化它,它就会失败。
我读了几个案例: #1951 #2001
但似乎没有一个能够解决这个问题。
index.js
module.exports = (on, config) =>
on('before:browser:launch', (browser, launchOptions) =>
if (browser.name === 'chrome')
launchOptions.args.push('--disable-site-isolation-trials');
launchOptions.args.push('--incognito')
return launchOptions
)
test.js
context('Checkout Purchase', () =>
describe('Checkout Form', () =>
it('Tests Promo Codes', () =>
cy.wait(2000);
cy.get('#promoCode')
.type('bw-nw-testing')
.should('have.value', 'bw-nw-testing')
cy.get('#applyPromoCodeButton')
.click()
.wait(2000)
)
)
)
cypress.json
"projectId": "lkj8fdj",
"chromeWebSecurity": false,
"baseUrl": "http://localhost:3000"
【问题讨论】:
【参考方案1】:HTTP 400 状态码代表Bad-Request。 (即发送到 API 端点的请求不是 API 所期望的请求)。 如果上述 HTTP 请求是从您的应用程序发送的,而不是直接从 Cypress 发送的,则发出请求的应用程序代码可能有些错误。
检查浏览器上的网络选项卡,并尝试手动复制发送到外部(?)API 的请求。
注意:通常在测试期间,存根(模拟)来自外部实体的响应是一种常见的做法,但首先您必须首先确保传出请求是正确的。否则,您可能会掩盖应用程序中的错误。
【讨论】:
更新打开新标签时,我能够在同一浏览器中手动发送请求。以及通常在我自己的浏览器中。每当它的自动化失败时 @Pwntastic 如果您使用 Cypress 打开浏览器并加载站点,当您尝试在该浏览器中手动执行这些步骤时会发生什么? 如果我手动完成所有操作,一切正常。是否在 cypress 浏览器中。 @natn2323 您好,我面临着完全相同的问题。链接在 CI 中返回 404,但在我的本地它正在传递。 @Pwntastic 请问您是如何解决的。谢谢 @ZombiePie 嘿,我不记得我是如何解决这个问题的。看起来我有答案但删除了它。我在下面取消删除它供您查看。不过我不确定它是否会有很大帮助。【参考方案2】:我找到了一个不错的答案。如果有人有任何其他见解,我很想听听。
Rescoure:superdomain 以下是一些由于限制会引发错误的测试用例示例:
.click() 带有指向另一个超级域的 href。 .submit() 导致您的网络服务器重定向到另一个超级域。 在您的应用程序中发出 javascript 重定向,例如 window.location.href = '...',到另一个超级域。【讨论】:
以上是关于点击发送请求时出现 Cypress 400 XHR 错误的主要内容,如果未能解决你的问题,请参考以下文章
从 React 向 Django 发送 post 请求时出现 400(错误请求)