Cypress中使用cy.wrap包裹变量后调用type()函数输入失败的技术求助
解决Cypress中提取匹配文本后
.type()无法输入的问题 这个问题我之前也碰到过!核心原因很简单:String.match()方法返回的是匹配结果数组(哪怕只匹配到一个结果,它也会把结果放在数组里),而Cypress的.type()方法只接受字符串类型的参数,直接传入数组自然会报错。
解决思路
只需要从匹配得到的数组中取出第一个元素(也就是你实际需要的验证码字符串),再把这个纯字符串存入别名,后续就能正常用.type()输入了。
修改后的代码示例
1. 提取验证码并存储为字符串
你可以直接通过数组下标[0]获取匹配到的字符串:
cy.get('#accessInfoText').invoke('text').then($wholeText => { let pattern = /(?<=code: ).{10}/i; // 从匹配数组中取出第一个元素(纯字符串) let number = $wholeText.match(pattern)[0]; cy.wrap(number).as('accessCode'); cy.log(number); // 现在输出的是纯字符串AsTE5sOlJU });
或者用ES6解构赋值,写法更直观:
cy.get('#accessInfoText').invoke('text').then($wholeText => { let pattern = /(?<=code: ).{10}/i; // 解构数组,直接拿到第一个匹配项 let [number] = $wholeText.match(pattern); cy.wrap(number).as('accessCode'); cy.log(number); // AsTE5sOlJU });
2. 后续输入验证码
现在别名里存的是纯字符串,直接传入.type()就没问题了:
cy.get('@accessCode').then(code => { cy.log(code); // 输出纯字符串AsTE5sOlJU cy.followLabel('Access code').type(code) });
额外提示:容错处理
如果担心页面上可能没有匹配到验证码(比如元素加载慢、文本格式变化),可以加个判断避免报错:
cy.get('#accessInfoText').invoke('text').then($wholeText => { let pattern = /(?<=code: ).{10}/i; const matchResult = $wholeText.match(pattern); if (matchResult) { const number = matchResult[0]; cy.wrap(number).as('accessCode'); cy.log(`提取到验证码:${number}`); } else { cy.log('未匹配到验证码,请检查文本格式或元素加载状态'); // 这里可以添加失败处理逻辑,比如cy.fail()或者自定义断言 } });
内容的提问来源于stack exchange,提问作者Skip
相关产品推荐
相关产品推荐

