点击发送请求时出现 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 错误的主要内容,如果未能解决你的问题,请参考以下文章

发送 ajax 请求 django 时出现 400 错误

从 React 向 Django 发送 post 请求时出现 400(错误请求)

在 wcf rest 中发送 xml 请求时出现错误请求 400

验证表单“发送的请求在语法上不正确”时出现错误 400

cypress运行xhr请求报错

使用 NativeEthernet 发布到 InfluxDB 时出现 400 错误请求