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