乐闻世界logo
搜索文章和话题

如何等待 Cypress 中的元素消失?

4 个月前提问
3 个月前修改
浏览次数20

1个答案

1

在 Cypress 中等待元素消失是一个常见的测试需求,可以通过多种方式实现。这通常是在处理异步事件,如加载指示器的消失、弹窗的关闭或元素状态的更新等场景中非常有用。

方法一:使用 .should('not.exist')

最直接的方法是使用 .should('not.exist') 断言。这个方法会持续检查元素直到它不再存在。例如,如果我们要检测一个加载指示器是否消失,可以这样写:

javascript
cy.get('.loading-indicator').should('not.exist');

这里的 .get() 方法首先尝试获取类名为 loading-indicator 的元素,然后 .should('not.exist') 会持续断言这个元素直到它不在 DOM 中。

方法二:使用 .should('not.be.visible')

如果元素还在 DOM 中但是不可见,我们可以使用 .should('not.be.visible')。这适用于那些通过 CSS 属性(如 display: nonevisibility: hidden)被隐藏的元素。

javascript
cy.get('.modal').should('not.be.visible');

这段代码检查一个模态窗口元素,直到它不再可见。

方法三:结合使用 cy.wait() 和断言

有时候,我们需要等待一定的时间来确保元素状态的变化。可以使用 cy.wait() 方法,后面跟上相应的断言:

javascript
cy.wait(1000); // 等待1000毫秒 cy.get('.alert').should('not.exist');

这种方法需要谨慎使用,因为固定的等待时间可能会导致测试结果的不稳定性,尤其是在不同的网络环境或系统负载情况下。

方法四:使用 cy.get()timeout 选项

Cypress 允许在 cy.get() 方法中设置 timeout 选项,这样即使是获取元素的步骤也可以有明确的等待时间。

javascript
cy.get('.notification', { timeout: 10000 }).should('not.exist');

这段代码会尝试在10秒内持续检查一个通知元素,直到它消失。

示例场景

假设我们有一个购物车应用,用户在添加商品后会看到一个“添加成功”的提示,该提示会在几秒后自动消失。我们的测试需要验证这个提示是否正确消失。

javascript
describe('购物车功能测试', () => { it('添加商品后,成功提示应该自动消失', () => { // 假设添加商品的按钮有一个 ID 是 add-to-cart cy.get('#add-to-cart').click(); // 检查提示信息出现 cy.get('.success-message').should('be.visible'); // 等待并检查提示信息消失 cy.get('.success-message').should('not.exist'); }); });

这个测试首先模拟用户点击添加到购物车的操作,然后验证提示信息是否出现且最终消失,确保用户界面按预期反应。

2024年6月29日 12:07 回复

你的答案