我有几个地方,我需要点击一些元素,但我不希望它循环通过。我觉得答案就在我面前,但却找不到正确的解决方法。
下面是一个代码示例,它现在被困在一个永久循环中:
for(let n = 1; n <= 19; n++){
cy.get('li.active > .nav > :nth-child(n) > a').click({multiple: true})
cy.wait(400)
}
我有19个元素,它们都是相同的,只是编号为1-19,我只想让测试单击它们,等待让它显示页面,然后单击下一个。
答案cy.get('#side-menu > :nth-child(2) > a').click()
cy.wait(400)
cy.get('li.active > .nav').each(($ele) => {
cy.wrap($ele).find('a').click({multiple:true})
})
还处理了我的另一个for循环,它永远持续下去,永远不会停止,除非像这个原始问题一样手动停止,并将其替换为each()
。
cy.get('#side-menu > li > a').each(($ele) => {
cy.wrap($ele).click({multiple:true})
})
```
您可以使用each()
循环遍历元素并逐个单击按钮-
cy.get('li.active > .nav').each(($ele) = > {
cy.wrap($ele).find('a').click()
})
如果你的页面刷新每次点击,你不能使用Cypress.each()
,因为你会得到"脱离DOM"错误。
尝试递归函数
it('tests the nav buttons', () => {
function clickNav(buttonNum) {
if (buttonNum === 20) return // finished
cy.get('li.active > .nav > :nth-child(n) > a').click()
cy.wait(400)
clickNav(++buttonNum) // next
}
clickNav(1)
})
但是有别的东西在运行,从技术上讲,你的循环也应该正常。
感谢您的解决方案- Alpan的工作是这样的:
cy.get('#side-menu > :nth-child(2) > a').click()
cy.wait(400)
cy.get('li.active > .nav').each(($ele) => {
cy.wrap($ele).find('a').click({multiple:true})
})
忘了我必须通过第n个子click打开下拉菜单然后在each()
{multiple:true}