Cypress - 如何等待 XHR 请求

dns*_*_nx 6 javascript cypress

我是新手cypress,请耐心等待。;-) 我确定这是一个简单的问题,我已经阅读了 的文档cypress,但在我的cypress测试中似乎仍有一些错误。xhr当我单击要测试的页面的不同语言时,我想等待请求完成。当我使用时它有效,wait(5000)但我认为,等待xhr请求完成的方法比修复等待 5 秒更好。这是我的代码。任何帮助或提示表示赞赏:

describe('test',() => {
    it('should open homepage, page "history", click on English language, click on German language',() => {
        cy.server();
        cy.route('POST','/ajax.php').as('request');
        cy.visit('http://localhost:1234/history');
        cy.wait('@request');
        cy.get('div[class="cursorPointer flagSelect flag-icon-gb"]').click({force:true});
        cy.route('POST','/ajax.php').as('request');
        cy.wait(['@request']);
        //cy.wait(5000); // <- this works, but seems to be not the best way
        cy.get('h2').should(($res) => {
            expect($res).to.contain('History');
        })
        cy.get('.dataContainer').find('.container').should('have.length', 8);
    });
});
Run Code Online (Sandbox Code Playgroud)

最后检查

cy.get('.dataContainer').find('.container').should('have.length', 8);
Run Code Online (Sandbox Code Playgroud)

不成功,因为xhr请求还没有完成。该xhr请求被解雇,当图标上的点击完成:

cy.get('div[class="cursorPointer flagSelect flag-icon-gb"]').click({force:true});
Run Code Online (Sandbox Code Playgroud)

这是 xhr 请求的图像,如果这有助于找到错误:

在此处输入图片说明

谢谢你的帮助。

Boy*_* K. 2

你确定这条线是正确的吗?否则 cy.wait 将无法按您想要的方式运行。

cy.route('POST','/ajax.php').as('request');
Run Code Online (Sandbox Code Playgroud)

我期待类似的东西

cy.route('GET','/endpoint').as('request');
Run Code Online (Sandbox Code Playgroud)

您可以通过开发者工具(Chrome中的F12)查找它是什么路线。转到网络以监视打开页面时加载的 XHR 类型。

找出请求 URL 和方法 - 以 bing.com 为例

另外:我更喜欢在 beforeEach 中包含 cy.server() 和 cy.route() 命令。那么你只需要测试本身中的 cy.wait() 。有关更多信息,请参阅https://docs.cypress.io/guides/references/best-practices.html#2-Run-shared-code-before-each-test 。