While循环元素状态柏树

时间:2020-07-08 11:21:42

标签: javascript ui-automation cypress

我有一个问题,我想单击按钮直到它消失,但是次数可能有所不同,所以我想检查可见性状态,而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;
        }
      });

1 个答案:

答案 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()。我正在使用打字稿,并且此方法是在类中设置的,但您也可以将其作为常规函数来执行。