我正在使用赛普拉斯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: Timed out retrying: Expected to find element: '[data-cy-component=list-item-title]', but never found it.
它在存在元素的地方工作得很好。如果没有找到元素,我想继续进行不同的测试。
这是我尝试过的一个实验:
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。
Update:
通过放置一个cy.wait(1000)
;在执行 Add 后(在我的实验中) - 给 DOM 时间来更新 - 找到了新元素。对于更具体的选择器,不需要等待