我是柏树的新手,在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秒。