Cypress: Могу ли я предотвратить сбой Cypress cy.get, если элементы не найдены? - PullRequest
0 голосов
/ 11 января 2019

Я использую Cypress cy.get для захвата элементов, но если их нет, мой тест не пройден. Я не хочу, чтобы это потерпело неудачу. Я хочу, чтобы это продолжалось. Тест состоит в том, чтобы просто перечислить элементы, которые там есть, если таковые имеются.

const listItemTitle = '[data-cy-component=list-item-title]';
cy.get(listItemTitle).each(($el, index, $list) => {
  cy.wrap($el).then(($span) => {
    const spanText = $span.text();
    cy.log(`index: ` + index + ' ' + spanText);
  });
});

Я бы подумал, если бы там не было элементов - этот код все равно был бы в порядке, но не так. Когда я запускаю его, я получаю эту ошибку: CypressError: Тайм-аут повторной попытки: Ожидается найти элемент: '[data-cy-component = list-item-title]', но так и не найден.

Отлично работает там, где присутствуют элементы. Если элементы не найдены, я хочу продолжить и провести другой тест.

Вот эксперимент, который я попробовал:

let count: number = Cypress.$(listItemTitle).length;
cy.log('before:' + count);
cy.get(actionsBarActionsAdd).click();
cy.get(singlePickerSearch).type('Assets' + '{enter}');
cy.get(listItemCheckboxTitle)
  .first()
  .click();
cy.toast({
  type: 'Success',
});
count = Cypress.$(listItemTitle).length;
cy.log('after:' + count);
cy.get(listItemTitle).each(($li, index, $lis) => {
  cy.log('interface no. ' + (index + 1) + ' of ' + $lis.length);
  cy.wrap($li).click();
});

Это был результат:

18 LOG        before:0
19 GET       [data-cy-component-key="actions-add"] input
20 CLICK
21 GET       [data-cy-component=single-picker-search] input
22 TYPE      Assets{enter}
23 GET       [data-cy-component="list-item-checkbox-title"]
24 FIRST
25 CLICK
26 GET       .iziToast    toast2
27 ASSERT    expected [ <div.iziToast.iziToast-opening.fadeInUp.iziToast-theme- 
alloy.iziToast-color-green.iziToast-animateInside>, 1 more... ] to have class iziToast-color-green
28 LOG       after:0
29 GET       [data-cy-component=list-item-title]
30 LOG       interface no. 1 of 1

Окончательно показывает, что Cypress. $ (ListItemTitle) .length не считает количество элементов с селектором: listItemTitle.

Обновление:

положив cy.wait (1000); после выполнения добавления (в моем эксперименте), когда у DOM было время для обновления, был найден новый элемент. С более конкретными селекторами ожидание не требуется

1 Ответ

0 голосов
/ 11 января 2019

Вы можете использовать jquery через Cypress.$, чтобы проверить, существуют ли они.

const listItemTitle = '[data-cy-component=list-item-title]';
if (Cypress.$(listItemTitle).length > 0) {
  cy.get(listItemTitle).each(($el, index, $list) => {
    cy.wrap($el).then(($span) => {
    const spanText = $span.text();
    cy.log(`index: ` + index + ' ' + spanText);
    });
  });
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...