如何在Cypress中从.then回调返回文本值(JS/TS)
解决Cypress中.then回调外部访问数据的类型错误问题
问题根源分析
你的代码有两个关键问题触发了报错:
getText函数没有返回Cypress的命令链,函数默认返回undefined(也就是类型提示里的void),当你把它传给cy.log()时,自然会出现“void不能赋值给string类型参数”的错误。cy.log()返回的是Cypress的链式操作对象,不是文本内容,所以let aaa = cy.log($elem.text())这行拿到的不是元素文本,后续的toString()也无法得到预期的结果。
修正后的代码写法
要正确获取并在外部访问元素文本,得利用Cypress的异步链式特性,代码改成这样:
function getText() { // 必须返回整个Cypress命令链 return cy.get('#locator').then(function($elem) { const elemText = $elem.text(); cy.log(elemText); // 这里正常打印元素文本 return elemText; // 返回文本内容,供后续链式调用使用 }); } // 不能直接赋值,要通过.then接收异步返回的结果 getText().then(function(returnedValue) { cy.log(returnedValue); // 这里能正确打印元素文本 });
关键说明
Cypress所有命令都是异步执行的,不能像同步代码那样直接把函数返回值赋值给变量使用,必须通过.then()回调来接收异步操作的结果,这是Cypress的核心运行机制。
内容的提问来源于stack exchange,提问作者Ivan Markov
相关产品推荐
相关产品推荐

