赛普拉斯:如果找不到任何元素,我可以防止赛普拉斯cy.get失败吗?

时间:2019-01-11 16:46:40

标签: cypress

我正在使用Cypress cy.get来获取元素,但是如果没有,则测试失败。 我不希望它失败。我希望它继续。测试只是列出其中的项目(如果有)。

dir

我本来以为,如果那里没有任何元素,那么这段代码仍然可以,但事实并非如此。当我运行它时,出现以下错误:CypressError:超时重试:期望找到元素:“ [data-cy-component = list-item-title]”,但从未找到。

在存在元素的地方效果很好。如果找不到任何元素,我要继续进行其他测试。

这是我尝试过的实验:

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);
  });
});

这是结果:

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();
});

最终显示Cypress。$(listItemTitle).length不计算选择器listItemTitle的元素数量。

更新:

通过放置cy.wait(1000);在执行完Add(在我的实验中)后-给DOM时间更新-找到了新元素。使用更具体的选择器,不需要等待

2 个答案:

答案 0 :(得分:4)

您可以通过Cypress.$使用jquery来检查是否存在。

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);
    });
  });
}

答案 1 :(得分:0)

您可以使用cy.get(".field").should("have.length", 0)