while 循环元素状态 cypress

Mar*_*scu 6 javascript ui-automation cypress

我有一个问题,我想单击一个按钮直到它消失,但次数可能会有所不同,所以我想检查可见性状态,当可见= true时单击按钮,当可见= false时结束测试,但问题是我不知道如何循环从获取元素到末尾的所有链。单击按钮一次,由于中断而停止;如果我删除中断,它甚至不会单击它会永远循环,主要问题是第一次通过链时,值是 true 但它不会重复

cy.get('[idElem]')
      .then($isVisible => {
        return $isVisible.is(':visible');
      })
      .then(value => {
        while (value === true) {
          cy.get('[idElem]').click();
          break;
        }
      });
Run Code Online (Sandbox Code Playgroud)

Jon*_*vin 4

由于 cypress 的异步性质,您不能将 while/for 循环与 cypress 一起使用。Cypress 不会等待循环中的所有内容完成才再次开始循环。但是,您可以改为执行递归函数,并等待一切完成后再再次调用方法/函数。

所以你可以做这样的事情,它会起作用:

clickVisibleButton = () => {
        cy.get( 'body' ).then( $mainContainer => {
            const isVisible = $mainContainer.find( '#idOfElement' ).is( ':visible' );
            if ( isVisible ) {
                cy.get( '#idOfElement' ).click();
                this.clickVisibleButton();
            }
        } );
    }
Run Code Online (Sandbox Code Playgroud)

然后显然在你的测试中调用了this.clickVisibleButton()。我正在使用打字稿,并且此方法是在类中设置的,但您也可以将其作为常规函数来执行。