如何等待api调用完成,然后使用cypress检查元素是否存在?

如何等待api调用完成,然后使用cypress检查元素是否存在?,cypress,Cypress,我是cypress的新手,我正在尝试在api调用完成后检查页面上是否存在该元素 我向url'things/thing1'发送一个http帖子,一旦这个api完成,我想检查页面上是否存在span元素 我试过下面的方法 const setUp = () => { cy.apiPatchSomethings(something1) .then(() => { cy.reload(); }); } describe('Suit

我是cypress的新手,我正在尝试在api调用完成后检查页面上是否存在该元素

我向url'things/thing1'发送一个http帖子,一旦这个api完成,我想检查页面上是否存在span元素

我试过下面的方法

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
是否返回承诺?