赛普拉斯:替代命令 '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);
我正在寻找等待命令的替代方法。
众所周知,一个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 毫秒后重试超时:预期“
我的问题不是等到页面成功加载,而是等到内容存在并且 available/clickable 等
使用此命令可以看到一点改进,但不能解决我的问题。
Cypress.config('defaultCommandTimeout', 50000);