Cypress分页表格查找指定ID行并删除时,变量无法替换硬编码值的问题
Cypress分页表格查找指定ID行并删除时,变量无法替换硬编码值的问题
嘿,我明白你遇到的问题了——把硬编码的15换成函数参数id后,代码就找不到目标行了对吧?这是因为你直接在:contains()里写id的话,jQuery会把它当成字面量字符串去匹配,而不是你传入的变量值,自然就找不到对应的行啦。
我给你两个解决方案,你可以根据需求选择:
方案1:用ES6模板字符串嵌入变量
这是最简单的修改方式,把选择器用反引号包裹,用${id}把变量插入进去,这样jQuery就能识别到变量的实际值了:
deleteRowByID(id){ cy.get('nb-card-body').then(body =>{ // 用模板字符串把变量id注入到contains选择器中 const targetRows = body.find('td:nth-child(2)').filter(`:contains(${id})`) if(targetRows.length > 0){ cy.contains('td:nth-child(2)', id) .parent('tr') .find('.nb-trash') .click() } else { // 加个判断:如果下一页按钮不可用,说明已经到最后一页了,终止递归 cy.get('[aria-label="Next"]').then(nextBtn => { if(nextBtn.is(':enabled')){ cy.wrap(nextBtn).click() this.deleteRowByID(id) } else { throw new Error(`未找到ID为${id}的行,请检查ID是否正确`) } }) } }) }
方案2:用精确匹配替代:contains()(更严谨)
:contains()有个小问题——它会匹配包含目标字符串的内容,比如你要找ID=15,它可能会误匹配到150、215这类行。如果需要精确匹配,你可以用.filter()的回调函数来做:
deleteRowByID(id){ cy.get('nb-card-body').then(body =>{ // 精确匹配单元格文本和传入的id(注意转成字符串,避免类型不匹配) const targetRows = body.find('td:nth-child(2)').filter((index, element) => { return Cypress.$(element).text().trim() === id.toString() }) if(targetRows.length > 0){ cy.contains('td:nth-child(2)', id) .parent('tr') .find('.nb-trash') .click() } else { cy.get('[aria-label="Next"]').then(nextBtn => { if(nextBtn.is(':enabled')){ cy.wrap(nextBtn).click() this.deleteRowByID(id) } else { throw new Error(`未找到ID为${id}的行,请检查ID是否正确`) } }) } }) }
另外我还帮你加了下一页按钮的可用性判断,避免到最后一页还继续递归点击,导致不必要的错误。
备注:内容来源于stack exchange,提问作者Bazy1i
相关产品推荐
相关产品推荐

