如何在Cypress条件语句中使用'exist'判断元素是否存在?
Cypress 判断元素存在并执行对应操作的正确方式
你不能直接用.should('exist')配合if语句实现需求,原因有两点:
- Cypress命令是异步执行的,
cy.get('.mt-5').should('exist')不会返回布尔值,无法作为if的判断条件; cy.get()默认会等待元素出现(默认超时4秒),若元素不存在,这条命令会直接触发超时错误,中断测试流程。
正确实现方式
通过同步检查DOM元素的方式判断,以下是两种可靠写法:
写法一:借助cy.get('body')确保DOM就绪后检查
cy.get('body').then(($body) => { // 同步检查目标元素是否存在 if ($body.find('.mt-5').length > 0) { cy.get('.mt-5') .find('li') .then(($listItems) => { const listLength = $listItems.length; cy.wrap(listLength).as('listLength'); }); } });
写法二:直接使用Cypress.$同步查询DOM
// 同步检查元素是否存在(需确保页面已加载完成) if (Cypress.$('.mt-5').length > 0) { cy.get('.mt-5') .find('li') .then(($listItems) => { const listLength = $listItems.length; cy.wrap(listLength).as('listLength'); }); }
这两种写法都会在元素不存在时跳过后续的列表长度获取逻辑,不会触发超时错误,符合你“无列表则继续执行”的需求。
内容的提问来源于stack exchange,提问作者CobaltEclipse117
相关产品推荐
相关产品推荐

