如何使赛普拉斯等待数量未定的XHR请求

时间:2020-10-21 16:02:40

标签: javascript reactjs testing cypress e2e-testing

在我的React应用程序中,当用户登录时,他们被重定向到仪表板。然后,应用程序向“ / files”端点发送请求,端点将返回静态文件的路径,然后应通过EventHubConsumerAsyncClient consumer = new EventHubClientBuilder() .connectionString("<< CONNECTION STRING FOR SPECIFIC EVENT HUB INSTANCE >>") .consumerGroup(EventHubClientBuilder.DEFAULT_CONSUMER_GROUP_NAME) .buildAsyncConsumerClient(); // Receive newly added events from partition with id "0". EventPosition specifies the position // within the Event Hub partition to begin consuming events. consumer.receiveFromPartition("0", EventPosition.latest()).subscribe(event -> { // Process each event as it arrives. }); 之类的单独请求来逐个读取静态文件的路径。 问题是,这个数字永远不会相同。有时是10,有时是16,等等。直到这些资源提取完成,应用程序才会显示加载屏幕。如何让赛普拉斯等到所有响应完成?我尝试了EventData event = partitionEvent.getData(); ,但它仅等待该类型的第一个请求。我不能创建多个GET https://api_address/static_file/xxx,因为正如我所说,我不知道请求的数量。我考虑过尝试cy.wait()仪表板div(仅在获取完成后才显示仪表板)并将重试超时设置为一个非常大的数字,但这会使我的测试不必要地变慢-正如我所说,请求数是随机的,甚至可以是1个请求。 有什么方法可以让柏树等待,直到没有特定类型的活动请求?或者,也许您知道另一种解决此问题的方法?

1 个答案:

答案 0 :(得分:1)

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

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

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

?如果cy.get()命令后的断言失败,则cy.get()命令将再次重新查询应用程序的DOM。然后,赛普拉斯将尝试对cy.get()产生的元素进行断言。如果断言仍然失败,则cy.get()将尝试再次重新查询DOM,依此类推,直到达到cy.get()命令超时为止。

如果这太难了,您可以拦截来自/files请求的响应,并检查响应以获取将要请求的static_files的数量。您可以为每个文件设置cy.wait()