Кипарис и нестабильный DOM - PullRequest
1 голос
/ 23 апреля 2020

Я использую 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 для компонента, и у него нет бюджета для исследования проблемы.

Также я обсуждал с разработчиками, можно ли где-нибудь добавить что-то, чтобы указать, что загрузка компонент закончен, но, опять же, это кажется невозможным. Они не могут гарантировать, что загрузка компонента завершена, потому что они не знают, откуда происходят эти обновления.

Вы знаете, как я могу использовать кипарис для решения этой ситуации?

1 Ответ

0 голосов
/ 07 мая 2020

Это плохая практика использования в кипарисе. Я бы предложил использовать игровую площадку

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

, чтобы найти ваши предметы. Попробуйте следовать принципу Уникальность и используйте cy.get('[data-test-selector=you-selector']); вместо ожидания. Он будет ждать вас.

Например, посетите и cy.get титульный лист.

Кроме того, если у вас есть анимация, это может вызвать проблемы DOM с возвратом вперед и назад. Если вы удалите их, это будет быстрее и стабильнее.

...