2

我正在使用 cypress 对 react 应用程序进行一些 e2e 测试,但在单击元素时遇到问题。

我有这个简单的脚本:

it('can bookmark/unbookmark the posting', () => {
    cy.visit(pdfPosting.url)
      .wait(1000)
      .contains('Save')
      .should('be.visible')
      .click();

    cy.visit('/jobs/jobbox')
      .contains(pdfPosting.title)
      .should('be.visible');

    cy.visit(pdfPosting.url)
      .wait(1000)
      .contains('Saved')
      .should('be.visible')
      .click();

    cy.visit('/jobs/jobbox')
      .findByText(pdfPosting.title)
      .should('not.exist');
    }
  });

我的问题开始是因为SaveSaved按钮位于页面加载时由于未知原因刷新多次的反应组件内。测试失败,因为有时组件会在按钮上的contains和之间刷新。click

现在解决这个问题的唯一方法是添加你在测试中看到的等待,但我真的很讨厌这个 hack。

我尝试做的第一件事是捕获错误并重试该contains.should.click块,但赛普拉斯不允许这样做(https://docs.cypress.io/guides/core-concepts/conditional-testing.html#Error-Recovery)和最糟糕的是本文提出的解决方法对我不起作用(或者我不知道该怎么做)

我还尝试处理事件(https://docs.cypress.io/api/events/catalog-of-events.html#Uncaught-Exceptions),但我找不到任何可以用来重试的事件代码并继续执行测试。

我试图与开发人员交谈,如果他们能解决刷新问题,但简短的故事是他们不会。最终用户没有意识到组件上的这种刷新,并且没有预算来调查问题。

此外,我正在与开发人员讨论我们是否可以在某处添加一些东西,以表明组件的加载已经完成,但是,这似乎是不可能的。他们不能不承认组件的加载已经完成,因为他们不知道这些刷新来自哪里。

你知道我如何使用 cypress 来处理这种情况吗?

4

1 回答 1

1

在柏树中使用等待是一种不好的做法。我建议使用游乐场

https://docs.cypress.io/guides/core-concepts/test-runner.html#Selector-Playground

找到您的物品。尝试遵循唯一性原则并使用cy.get('[data-test-selector=you-selector']);而不是等待。它会等你。

例如,访问并 cy.get 标题页。

此外,如果您有动画,则可能会导致 DOM 来回出现问题。如果你删除它们,它会更快更稳定。

于 2020-05-07T09:01:37.783 回答