我在编写有条件案例的测试时遇到问题。其中一项测试使用'before'(beforeAll)函数中的api创建一个对象,然后在测试中有时在搜索结果中不显示所创建的对象。我以前用过木偶。我可以让页面重新加载,直到对象显示在搜索结果中。但是,我无法做同样的事情。我当时正在考虑使用cy.get,然后检查响应。例如,(cy.get('sth').then(s1 => {do something like cy.reload()})).
然后,我发现s1在重新加载后始终保持不变。所以,我被困住了。希望有人帮助我。如果描述不清楚,请在下面发表我的另一篇文章。谢谢
答案 0 :(得分:0)
根据我从您的帖子中收集的信息,我认为这样可能会有所帮助:
cy.get('some.selector').then(elem => {
// ...
});
cy.reload();
cy.get('some.selector').then(elem => {
// run code on element after reloading...
});
如果这不能回答您的问题,请考虑制作一个minimal, complete and verifiable example。
答案 1 :(得分:0)
我的坏。我没有很好地解释我的问题。问题不在before()函数中。在before()函数中,我调用post API创建人员。 然后,我将在每个测试中使用在before()函数中创建的人员。 代码如下:
before(()=> {createPerson(); cy.visit('mywebsite); login();} )
it('search person I created by calling api', () => {
cy.get('.search')
.type('person's name{enter}');
cy.get(':nth-child(1) > resulttable').click();
这是问题所在。由于数据需要传递时间,因此我无法在搜索结果中找到该人。然后,测试失败。
因此,我需要通过调用重新加载页面(该页面为搜索结果页面)
cy.reload();
但是,我不知道我需要在上面致电多少次才能使该人出现在搜索结果中。
我当前使用的解决方案是cy.wait(30000)
。等待30秒。
所以,我想知道我现在该怎么做。
答案 2 :(得分:0)
很抱歉,问题出在您的before函数中。只有在准备好要运行测试的环境后,才可以启动它。
const createPerson = (params, done)=>{
cy.request({// create people here}).then(({people})=>{
done(undefined, {people});
})
}
before((done)=> {
createPerson({}, (err, {people})=>{
cy.visit('mywebsite);
login({}, done); // this should be async as well
});
})
it('search person I created by calling api', () => {
//if you data is not cached, at this point you will have the people populated in your screen.
cy.get('.search')
.type('person's name{enter}');
cy.get(':nth-child(1) > resulttable').click();