Javascript Cypress IO-编写For循环
我一页有15个按钮。我需要测试每个按钮 我尝试了一个简单的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
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.*调用的执行顺序不确定。