Javascript 柏树和树冠

Javascript 柏树和树冠,javascript,try-catch,cypress,error-recovery,Javascript,Try Catch,Cypress,Error Recovery,我正在使用cypress对react应用程序进行一些e2e测试,但单击某个元素时遇到问题 我有一个简单的脚本: it('can bookmark/unbookmark the posting', () => { cy.visit(pdfPosting.url) .wait(1000) .contains('Save') .should('be.visible') .click(); cy.visit('/jobs/jobbo

我正在使用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');
    }
  });
我的问题是因为
Save
Saved
按钮位于react组件内,该组件在加载页面时由于未知原因被刷新多次。测试失败,因为有时组件在
包含
和按钮上的
单击
之间刷新

现在解决这个问题的唯一方法是添加测试中看到的等待,但我真的很讨厌这种黑客行为

我尝试做的第一件事是捕获错误并重试
contains.should.click
block,但cypress不允许这样做(),而且最糟糕的是,本文提出的解决方法对我不起作用(或者我不知道如何做)

我还尝试使用events(),但找不到任何可以用来重试部分代码并继续执行测试的方法

我试着与开发人员交谈,如果他们能解决刷新问题,但简单地说,他们不会。最终用户没有意识到组件上的此刷新,并且没有调查问题的预算

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


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

在cypress中使用等待是一种不好的做法。 我建议你去操场

查找您的项目。尝试遵循该原则并使用
cy.get('[data test selector=you selector'])而不是等待。它会等你的

例如,访问并获取标题页


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

您好,谢谢您的回答。我同意你的观点,最好有一个更好的方法来识别对象(如果我更改应用程序的本地化,我也会有问题),但在我的具体情况下,我认为我会有同样的问题,因为一旦按钮所在的组件被react刷新,元素将无效。我需要一种方法来等待页面稳定后查找元素并单击。