Я использую Cypress для некоторых тестов 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
находятся внутри компонента реакции, который обновляется несколько раз по неизвестным причинам при загрузке страницы. Тест не пройден, потому что иногда компонент обновляется между contains
и click
на кнопке.
Прямо сейчас единственным способом обойти эту проблему было добавление ожиданий, которые вы видите в тесте, но я действительно ненавижу этот хак.
Первое, что я попытался сделать, это перехватить ошибку и повторить попытку блока contains.should.click
, но Cypress не позволяет этого (https://docs.cypress.io/guides/core-concepts/conditional-testing.html#Error -Recovery ) и когда-либо худших предлагаемых обходных путей по этой статье не работают мне (или я не знаю, как это сделать)
Я также пытался работать с событиями (https://docs.cypress.io/api/events/catalog-of-events.html#Uncaught -Exception ), но я не смог найти любой, который я мог бы использовать, чтобы повторить только часть кода и продолжить выполнение теста.
Я пытался поговорить с разработчиками, если они могли бы решить проблему refre sh, но краткий рассказ в том, что они не будут Конечный пользователь не понимает об этом refre sh для компонента, и у него нет бюджета для исследования проблемы.
Также я обсуждал с разработчиками, можно ли где-нибудь добавить что-то, чтобы указать, что загрузка компонент закончен, но, опять же, это кажется невозможным. Они не могут гарантировать, что загрузка компонента завершена, потому что они не знают, откуда происходят эти обновления.
Вы знаете, как я могу использовать кипарис для решения этой ситуации?