【问题标题】:Conditional cases in cypresscypress 中的条件案例
【发布时间】:2018-09-07 20:06:16
【问题描述】:

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

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

【问题讨论】:

  • 我不太了解您的问题,但我注意到您试图告知/建议解决方案。如果问题出在您的 before 方法中的异步请求,请记住您始终可以将回调方法作为参数传递。例如: before((done)=>{//call done 一旦你有数据来设置你的对象});
  • 请看下面我的回答。我为我的问题添加了一些细节。谢谢

标签: puppeteer cypress


【解决方案1】:

很抱歉,问题出在您的 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();

【讨论】:

  • 我明白你的意思。谢谢。
【解决方案2】:

根据我从您的帖子中收集到的信息,我认为这样的内容可能会有所帮助:

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。

【讨论】:

  • 有时,由于 API 不稳定,只调用一次 cy.reload() 无济于事。有时,它可能需要 4-5 次重新加载。因此,我必须使用cy.wait(很长一段时间)才能得到两个九。如果问题不清楚,可以考虑在 google 中搜索一个帖子(这个帖子是 2 秒前刚刚创建的)。第一次,您可能会也可能不会根据 API 调用的速度搜索该帖子。对于这种情况,您可能需要刷新页面。如果您没有再次获得它,请刷新并继续。顺便说一下,感谢您的回复。
【解决方案3】:

我的错。我没有很好地解释我的问题。问题不在 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 秒。

所以,我想知道我现在要怎么做。

【讨论】:

    猜你喜欢
    • 2020-04-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-27
    • 2019-12-27
    • 2011-07-30
    • 2011-10-25
    相关资源
    最近更新 更多