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



我是柏树的新手,在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.wait。有其他方法可以解决这个问题吗。有人能帮我做这个吗。谢谢

Cypress命令cy.contains((在使用单个参数调用时,正在查找内容

语法
cy.contains(内容(
cy.contains

但我猜您正在寻找一个span元素,所以请使用

cy.get('span')

cy.contains('span', 'my-content-in-span')

假设这不是问题,只是一些任意的示例代码。。。

您可以修改设置函数以返回promise,以便等待重新加载。

const setUp = () => {
return cy.apiPatchSomethings(something1)     // need a return here
.then(() => {
return new Cypress.Promise(resolve => {  // inner return also
cy.reload()
resolve(true)                          // resolve will signal reload is finished
})
});
}

因为setup()是在before()内部调用的,所以Cypress将等待promise解析后再继续。

请不要添加额外的等待或超时,这是经常建议的。这只会导致零散的测试。

注意如果你不介意放弃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');
}
});

1.您可以等待span可见。柏树提供的默认超时为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秒。

相关内容

最新更新