如何让Cypress等待未确定数量的XHR请求



在我的React应用程序中,当用户登录时,他们会被重定向到仪表板。然后,应用程序向"/文件";端点,它返回静态文件的路径,然后应该通过单独的请求(如GET https://api_address/static_file/xxx(逐个提取这些文件问题是,这个数字从来都不一样。有时是10,有时是16等等。直到这些资源完成获取,应用程序才会显示加载屏幕。如何让Cypress等待所有响应完成?我尝试了cy.wait(),但它只等待该类型的第一个请求。我不能创建多个cy.wait(),因为正如我所说,我不知道请求的数量。我曾想过尝试cy.get()仪表板div(仪表板只有在获取完成后才会显示(,并将重试超时设置为一个非常大的数字,但这会使我的测试变得不必要地慢——正如我所说,请求的数量是随机的,甚至可以是1个请求。有没有办法让柏树等到没有特定类型的活动请求?或者你知道解决这个问题的另一种方法吗?

最快的方法是等待加载指示器消失。

cy.get('.static-files-loading-indicator', {timeout:30000}).should('not.exist');

此断言将重试最多30秒。请参阅此处的文档:

  • https://docs.cypress.io/guides/core-concepts/retry-ability.html#Commands-vs断言

🚨如果cy.get((命令后面的断言失败,那么cy.get(命令将再次重新查询应用程序的DOM。然后Cypress将尝试对cy.get((生成的元素进行断言。如果断言仍然失败,cy.gt((将再次尝试重新请求DOM,依此类推,直到cy.get(命令超时。

如果这太不稳定,您可以截取/files请求的响应,并检查该响应以获得将被请求的static_files的数量。您可以为每个文件设置一个cy.wait()

最新更新