使用Cypress JS做车型筛选分页测试时无法跳转页面问题求助
代码问题分析
- 核心问题:混用async/await与Cypress命令机制
Cypress的所有操作命令都是基于内部命令队列执行,不属于标准ES6 Promise,使用await不会等待Cypress命令实际执行完成,会导致执行顺序完全错乱,页码点击、页面跳转、元素获取的逻辑完全不同步,自然无法正常切换页面。 - 别名缓存问题
你在首次获取页码列表时用as("pages")设置了别名,切换页面后DOM刷新,该别名指向的还是旧页面中已经被销毁的页码元素,后续点击操作命中的是无效DOM,不会触发页面跳转。 - each方法不支持异步回调
Cypress的each()遍历方法不支持传入async异步回调,回调内的异步逻辑无法按预期执行,且你写的return false也无法正常终止遍历流程。 - 需求逻辑不匹配
你的测试目标是校验所有分页的所有条目都仅包含目标车型,当前代码逻辑是找到包含目标车型的条目就终止遍历,完全不符合测试预期。
修正后可运行代码
function findItem(value) { // 先获取总页数,不要缓存页码元素 cy.get("li.page-item:not(.page-pre):not(.page-next)").then(pageItems => { const totalPages = pageItems.length; // 遍历所有页码 for (let pageIndex = 0; pageIndex < totalPages; pageIndex++) { // 每次点击页码前重新获取最新的页码元素,避免缓存问题 cy.get("li.page-item:not(.page-pre):not(.page-next)").eq(pageIndex).click(); // 等待页面跳转后表格加载完成,可根据实际情况替换为你的页面加载判断逻辑 cy.get("table tr > td:nth-child(5) p").should('exist'); // 校验当前页所有条目都包含目标车型 cy.get('.css-1b4k5p > .chakra-text.css-0').each($el => { expect($el.text().toUpperCase()).to.include(value.toUpperCase()); }) } }) } // 调用测试 findItem("AUDI")
内容的提问来源于stack exchange,提问作者Luna
相关产品推荐
相关产品推荐

