我正在测试一个应用程序,它有一个按钮,可以在不重新加载页面的情况下改变屏幕上另一个元素的值。但是,值的变化几乎可以是瞬间的,或者需要几秒钟。显然,我不想使用一些任意等待,也不想使用(硬)断言——这可能会导致测试以失败而停止,而失败并不是失败……所以我我一直在关注 cypress-wait-until ( https://www.npmjs.com/package/cypress-wait-until )。我已经按照以下方式编写了各种变体:
waitForElemToChange(elem) {
elem.invoke('attr', val').then((initialVal) => {
cy.waitUntil(() => elem.invoke('attr', 'value').then((val) => val != initialVal))
}
但到目前为止没有任何效果 - 大多数尝试都导致“重试超时:cy.invoke() 错误,因为您的主题是:null。您不能调用任何函数,例如空值上的 attr。”
然而,它是同一个主题,刚刚在上一行中返回了一个值??
原文由 user13123513 发布,翻译遵循 CC BY-SA 4.0 许可协议
这看起来很复杂。我会通过等待
initialValue
来接近它,然后等待一个不同的值。.should()
将重试断言最多 4 秒。如果“几秒”是指超过 4 秒,则可以添加一个超时选项,这比任意等待要好,因为它会在断言通过后立即继续。
我假设您的元素是输入,因为您正在访问
val
而不是text
。