我有一个问题,我想单击按钮直到它消失,但是次数可能有所不同,所以我想检查可见性状态,而visible = true单击按钮,当visible = false结束测试但问题是我不知道如何从get元素到末尾循环所有链。单击按钮一次,由于中断而停止;如果我删除中断,它甚至不会单击就永远循环,主要问题是,它第一次通过链时,该值为true,但不会重复
cy.get('[idElem]')
.then($isVisible => {
return $isVisible.is(':visible');
})
.then(value => {
while (value === true) {
cy.get('[idElem]').click();
break;
}
});
答案 0 :(得分:1)
由于 cypress 的异步性质,您不能在 cypress 中使用 while/for 循环。在再次开始循环之前,赛普拉斯不会等待循环中的所有内容完成。但是,您可以改为执行递归函数,并在再次访问方法/函数之前等待所有内容完成。
所以你可以做这样的事情,它会起作用:
clickVisibleButton = () => {
cy.get( 'body' ).then( $mainContainer => {
const isVisible = $mainContainer.find( '#idOfElement' ).is( ':visible' );
if ( isVisible ) {
cy.get( '#idOfElement' ).click();
this.clickVisibleButton();
}
} );
}
然后显然在您的测试中调用 this.clickVisibleButton()
。我正在使用打字稿,并且此方法是在类中设置的,但您也可以将其作为常规函数来执行。