赛普拉斯:替代命令 'wait'

Cypress: Alternative for command 'wait'

我正在寻找等待命令的替代方法。

众所周知,一个page/component/etc。不会花费相同的时间来加载,也不会在每次调用时都可用。 因此,我不能依赖具有恒定时间规范的 'wait' 命令。

所以我正在寻找替代方案。

网上有人写道,命令'then'有助于等待条件满足。 不幸的是,以下替代方案不适用于我的情况:

cy.get(#element).should('exist').then(() =>{ 
   cy.get(#element).click(); 
});

我期待着您的消息和 'wait' 的替代方案。 多多问候 Janni

您可以像这样链接断言并应用超时:

cy.get('#element',{timeout: 5000}).should('be.visible').click()

这将做的是等待 re-qeuery 直到 5 秒,直到元素在 DOM 上可见,然后单击它。

感谢您的回答。

问题是必须增加默认超时。

Cypress.config('pageLoadTimeout', 300000);

我更喜欢 Alapan Das 的上述回答,而不是使用 cy.wait()。 如果您的 url 在点击元素时发生变化,您可以采用另一种方法。

cy.get(#element1).click();
cy.url().should('include','https://xyx.com/abc');   //cypress wait untill this page loads
cy.get(#element2).click();

请参阅此问题以获取更多详细信息:

根据应用程序的不同,有多种方法可以在调用任何操作或断言之前检查您的 page/component/etc 是否已加载。以下是一些用于某些场景的示例:

// wait for page load
cy.location('pathname').should('include','/new-path/') // check url is changed
cy.get('.element-on-new-page-only').should('be.visible') // check element is visible on new page

// wait for component load
cy.get('.loading', { timeout: 10000 }).should('not.exist') // sometimes apps have loading icon/screen so we wait until it is gone with a passed timeout option
cy.get('.component-finished-loading').should('be.visible')

// wait for component to disappear
cy.get('.component-to-disappear').should('not.exist') // can use 'not.be.visible' if app hides it instead

// wait for text update
cy.get('.element-new-text').should('include.text', 'new text') 

但这一切都不适合我。

在我的例子中是 AG-Grid table。 首先我点击 'X' 列的 header 进行排序。

即排序前该行的值为B,排序后同一行为A。 cypress 如此快速地自动执行该步骤,以至于它甚至没有注意到该行已被排序。 我会用1秒的'wait',然后他会感知排序。

代码:

 cy.get(createColId('name'), {timeout: 10000}).eq(1).should('include.text', 'A');

错误 4000 毫秒后重试超时:预期“”包含文本 'A',但文本是 'B'

我的问题不是等到页面成功加载,而是等到内容存在并且 available/clickable 等

使用此命令可以看到一点改进,但​​不能解决我的问题。

Cypress.config('defaultCommandTimeout', 50000);