柏树有条件的情况

时间:2018-09-07 20:06:16

标签: puppeteer cypress

我在编写有条件案例的测试时遇到问题。其中一项测试使用'before'(beforeAll)函数中的api创建一个对象,然后在测试中有时在搜索结果中不显示所创建的对象。我以前用过木偶。我可以让页面重新加载,直到对象显示在搜索结果中。但是,我无法做同样的事情。我当时正在考虑使用cy.get,然后检查响应。例如,(cy.get('sth').then(s1 => {do something like cy.reload()})).

然后,我发现s1在重新加载后始终保持不变。所以,我被困住了。希望有人帮助我。如果描述不清楚,请在下面发表我的另一篇文章。谢谢

3 个答案:

答案 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();