Cuando intento escribir el código OTP (lo obtengo de la API), Cypress muestra un error de captura de pantalla de Cypress
cy.get('input[data-placeholder="OTP"]').type(getOtpCode(phoneNumber)) function getOtpCode(phone) { var otpCode; cy.request({ method: 'GET', url: 'url' }).then(resp => resp.body) .then(data => data.find(element => element['body']['Message']['Phone'] == phone)) .then(phone => otpCode = phone['body']['Message']['CustomMessage']); return otpCode; }Si escribí una cadena aleatoria en lugar de getOtpCode(), está funcionando. ¿Sabes cómo resolver ese problema? Gracias por cualquier ayuda :)
Parece que primero debe realizar getOtpCode() , debido a async cy.request() .
Además, la función debe devolver cy.request() para permitir que .then() se use después.
function getOtpCode(phone) { return cy.request({ method: 'GET', url: 'url' }) .then(resp => resp.body) .then(data => data.find(element => element['body']['Message']['Phone'] == phone)) .then(phone => phone['body']['Message']['CustomMessage']); } getOtpCode(phoneNumber).then(otpcode => { cy.get('input[data-placeholder="OTP"]').type(otpcode) }) Alternativamente, cambie la función a un comando personalizado. No necesitará devolver nada ya que Cypress establece el asunto actual en el resultado del último .then() en la cadena cy.request() .
El comando personalizado se puede definir globalmente.
ciprés/soporte/comandos.js
Cypress.Commands.add('getOtpCode', (phone) => { cy.request({ method: 'GET', url: 'url' }) .then(resp => resp.body) .then(data => data.find(element => element['body']['Message']['Phone'] == phone)) .then(phone => phone['body']['Message']['CustomMessage']); })prueba
cy.getOtpCode(phoneNumber).then(otpcode => { cy.get('input[data-placeholder="OTP"]').type(otpcode) })Para la función haz esto:
cy.get('input[data-placeholder="OTP"]') .should('be.visible') .type(getOtpCode(phoneNumber)) function getOtpCode(phone) { var otpCode cy.request({ method: 'GET', url: 'url', }) .then((resp) => resp.body) .then((data) => data.find((element) => element['body']['Message']['Phone'] == phone) ) .then((phone) => (otpCode = phone['body']['Message']['CustomMessage'])) return cy.wrap(otpCode) }En su archivo de prueba, haga esto:
import className from '../path-to-js-file.js' //replace className with yours const obj = new className() //replace className with yours describe('Test Suite', () => { it('Test Case', () => { obj.getOtpCode(phone).then((otp) => { cy.get('input[data-placeholder="OTP"]').type(otp) }) }) })