如何在Cypress的then()方法外部获取从href提取的bookingId值
核心原因
Cypress 的所有命令都是异步队列执行的,你当前代码里的 return bookingId 会在 then 回调函数执行前就运行,此时 bookingId 还没有被赋值,因此外部获取到的只会是 undefined。同时你代码里给 then 回调加的 async 修饰是多余的,Cypress 会自动处理命令链的异步等待,额外加 async 反而可能引发逻辑异常。
可用解决方案
方法1:返回Cypress命令链,调用时接then取值
这是Cypress官方推荐的标准写法,符合Cypress的异步执行逻辑:
verifyBookingSuccess(){ // 直接返回整个命令链 return cy.findByTitle(/created/i).parent().parent().then(($ele)=>{ const bookingId = ($ele.attr("href").split("/"))[2] cy.log("Booking ID:" + bookingId) // 在then里返回要传递的值 return bookingId }) } // 外部调用示例 verifyBookingSuccess().then(bookingId => { // 此处即可正常使用拿到的bookingId cy.log("外部获取到的预订ID:" + bookingId) })
方法2:使用别名(Alias)跨步骤存储值
如果需要在多个测试步骤/用例中共享这个值,可以存在Cypress的别名里:
verifyBookingSuccess(){ cy.findByTitle(/created/i).parent().parent().then(($ele)=>{ const bookingId = ($ele.attr("href").split("/"))[2] cy.log("Booking ID:" + bookingId) // 把值包装后存为别名 cy.wrap(bookingId).as('bookingId') }) } // 任意后续位置取值示例 cy.get('@bookingId').then(bookingId => { // 此处即可使用bookingId })
内容的提问来源于stack exchange,提问作者imBollaveni
相关产品推荐
相关产品推荐

