Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Cypress IO-编写For循环_Javascript_Cypress - Fatal编程技术网

Javascript Cypress IO-编写For循环

Javascript Cypress IO-编写For循环,javascript,cypress,Javascript,Cypress,我一页有15个按钮。我需要测试每个按钮 我尝试了一个简单的for循环,比如 for (var i = 1; i < 15; i++) { cy.get("[=buttonid=" + i + "]").click() } for(变量i=1;i

我一页有15个按钮。我需要测试每个按钮

我尝试了一个简单的for循环,比如

for (var i = 1; i < 15; i++) {

   cy.get("[=buttonid=" + i + "]").click()
}
for(变量i=1;i<15;i++){
cy.get(“[=buttonid=“+i+”])。单击()
}

但柏树不喜欢这样。如何在Cypress中为循环编写代码?

为了强制执行任意循环,我创建了一个包含所需索引的数组,然后调用
cy.wrap

var genArr = Array.from({length:250},(v,k)=>k+1)
cy.wrap(genArr).each((index) => {
    cy.get("#button-" + index).click()
})

尝试使用反勾号输入模板文字:

for(let i = 0; i < 3; i++){
    cy.get(`ul li:nth-child(`${i}`)).click();
}
for(设i=0;i<3;i++){
cy.get(`ulli:nth child(`${i}')。单击();
}
虽然
cy.wrap().each()
会起作用(这个问题的答案之一),但我想给出一种对我有效的替代方法
cy.wrap()。each()
可以工作,但是常规while/for循环不能与cypress一起工作,因为cypress是异步的。Cypress不会在再次启动循环之前等待循环中的所有内容都完成。但是,您可以改为使用递归函数,并等待所有操作完成,然后再次命中方法/函数

下面是一个简单的例子来解释这一点。您可以检查按钮是否可见,如果它可见,请单击它,然后再次检查它是否仍然可见,如果它可见,请再次单击它,但如果它不可见,则不会单击它。这将重复,按钮将继续单击,直到按钮不再可见。基本上,反复调用方法/函数,直到不再满足条件,这与for/while循环完成相同的任务,但实际上与cypress一起工作

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

然后调用
this。在测试中单击VisibleButton()
。我使用的是typescript,这个方法是在一个类中设置的,但是您也可以将它作为一个常规函数来执行。

什么是Int?在JS中只能用
var
let
const
声明变量,对吧?糟糕透了。我重写了这个,用int代替var@konekoya你说Cypress“不喜欢”是什么意思?是否抛出了错误?你的意思是在
buttonid
前面加一个等号吗?
cy.get
是否返回任何内容?for循环不是此处中断的内容-我认为您的选择器不正确(应该是
buttonid=
,而不是
=buttonid=
)。请包括cypress给出的错误消息,以及足够的HTML来重现问题。这是唯一可靠的方法,至少在代码执行顺序很重要的情况下是如此。值得注意的是,由于cypress的异步特性,经典的for循环可能会导致循环内cy.*调用的执行顺序不确定。