如何等待api调用完成,然后使用cypress检查元素是否存在?
我是cypress的新手,我正在尝试在api调用完成后检查页面上是否存在该元素 我向url'things/thing1'发送一个http帖子,一旦这个api完成,我想检查页面上是否存在span元素 我试过下面的方法如何等待api调用完成,然后使用cypress检查元素是否存在?,cypress,Cypress,我是cypress的新手,我正在尝试在api调用完成后检查页面上是否存在该元素 我向url'things/thing1'发送一个http帖子,一旦这个api完成,我想检查页面上是否存在span元素 我试过下面的方法 const setUp = () => { cy.apiPatchSomethings(something1) .then(() => { cy.reload(); }); } describe('Suit
const setUp = () => {
cy.apiPatchSomethings(something1)
.then(() => {
cy.reload();
});
}
describe('Suite name', () => {
before(() => {
setUp();
});
it('test case', () => {
cy.contains('span');
}
});
上面的代码不起作用。甚至在页面上看到span元素之前,它会检查span元素
如果我像下面那样使用cy.wait(10000),它会工作
it('test case', () => {
cy.wait(10000);
cy.contains('span');
});
但是我不想用cy。等等。还有别的办法解决这个问题吗。有人能帮我吗。谢谢。1。您可以等待
span
显示。cypress提供的默认超时为4秒
cy.contains('span').should('be.visible')
2.如果您想为此命令指定自定义超时(例如10秒),可以使用:
cy.contains('span', { timeout: 10000 }).should('be.visible')
3.如果您想全局增加超时,请在cypress.json
文件中提及:
"defaultCommandTimeout": 10000
然后,只需使用:
cy.contains('span').should('be.visible')
现在,所有命令的默认超时时间为10秒。使用单个参数调用Cypress命令时,将查找内容
语法cy.contains(内容)
cy.contains(内容、选项)
cy.contains(选择器、内容)
cy.contains(选择器、内容、选项) 但我猜您正在寻找一个跨度元素,所以使用
cy.get('span'))
或
cy.contains('span','my content in span')
假设这不是问题所在,只是一些任意的示例代码 您可以修改设置函数以返回承诺,以便等待重新加载
const setUp=()=>{
return cy.apipatchsomething(something 1)//需要在此处返回
.然后(()=>{
返回新的Cypress.Promise(resolve=>{//也返回内部
cy.reload()
resolve(true)//resolve将发出重新加载完成的信号
})
});
}
因为setup()
是在before()内部调用的Cypress将在继续之前等待承诺的解决
请不要添加额外的等待或超时,这是经常被建议的。这只会导致不可靠的测试
注意如果您不介意放弃setup()
函数,它会变得简单得多
describe('Suite name', () => {
before(() => {
cy.apiPatchSomethings(something1)
.then(() => cy.reload() ); // all commands here will be completed
// before the tests start
});
it('test case', () => {
cy.contains('span', 'my-content-in-span');
}
});
cy.apipatchsomething
是否返回承诺?