我是cypress
的新手,所以请耐心等待。 ;-)
我确定这是一个简单的问题,我已经阅读了cypress
的文档,但是在cypress
测试中似乎还是有问题。
当我单击要测试的页面的另一种语言时,我想等待xhr
请求完成。
当我使用wait(5000)
时,它可以工作,但是我认为,等待5秒钟比fix wait更好的方法来等待xhr
请求完成。
这是我的代码。任何帮助或提示,不胜感激:
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);
});
});
最后检查
cy.get('.dataContainer').find('.container').should('have.length', 8);
不成功,因为
xhr
请求尚未完成。单击图标后,就会触发
xhr
请求:cy.get('div[class="cursorPointer flagSelect flag-icon-gb"]').click({force:true});
这里的xhr请求图像,如果这有助于发现错误:
谢谢你的帮助。
最佳答案
您确定这行是正确的吗?否则,cy.wait将无法正常运行。
cy.route('POST','/ajax.php').as('request');
我希望有类似的东西
cy.route('GET','/endpoint').as('request');
您可以通过开发人员工具(Chrome中的F12)查找路线。
打开页面时,请转至网络以监视加载哪种XHR。
Find out request URL and Method - example with 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。
关于javascript - Cypress -如何等待XHR请求,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/59872666/