Tengo una aplicación que usa Vimeo. Cuando el video termina, la aplicación responde a esto. Todo funciona como se esperaba, pero para asegurarme de que siga funcionando, me gustaría probar este comportamiento con Cypress. Como no quiero hacer que la prueba espere hasta el video, quiero omitir el video usando la API postMessage de Vimeo. Tengo la siguiente prueba:
cy.window().then( (window) => new Cypress.Promise((resolve) => { const vimeo = window.document .querySelector('[data-block="@appsemble/video"] > div') .shadowRoot .querySelector('iframe') .contentWindow; const handler = ({ data }) => { console.log(data); if (data.method === 'getDuration') { window.removeEventListener('message', handler); vimeo.postMessage( { method: 'setCurrentTime', value: Math.floor(data.value) - 1 }, '*', ); resolve(); } }; window.addEventListener('message', handler); vimeo.postMessage({ method: 'getDuration' }, 'https://player.vimeo.com'); }), );esto no funciona Nunca se llama al controlador de mensajes, lo que significa que la promesa nunca se resuelve y Cypress expira.
Sin embargo, si depuro las pruebas de Cypress y llamo a postMessage en el iframe, entonces Vimeo responde y se resuelve la promesa de Cypress.
En mi cypress.json ya tengo lo siguiente:
{ "chromeWebSecurity": false } ¿Me estoy perdiendo algo o simplemente no es posible llamar a postMessage desde una prueba de Cypress?