Tenemos un problema de tiempo con cypress/jsf y dos PrimeFaces-Autocompleta. Nuestra entrada de instalación depende del elemento seleccionado. Cuando se selecciona un elemento, se envía una solicitud ajax y se actualiza el campo de la instalación. (ver ejemplo de código a continuación - xhtml)
Nuestra prueba de ciprés primero selecciona un elemento y luego quiere seleccionar una instalación. Sin embargo, el campo de entrada de la instalación no se puede borrar porque está separado del DOM. El mensaje de error es: "CypressError: se agotó el tiempo de reintento: cy.clear() falló porque este elemento está desconectado del DOM". Ya esperamos la petición ajax (con cy.route) pero el problema sigue dando. (vea el ejemplo de código a continuación - javascript)
¿Cómo podemos evitar errores de separación con campos de entrada dependientes?
<!-- element --> <p:outputLabel id="elementLabel" for="element" value="#{i18n.element}" /> <p:autoComplete id="element" value="#{bean.selectedElement}" dropdown="true"completeMethod="#{bean.completeElement}" var="element" itemValue="#{element}" itemLabel="#{element}"> <p:ajax event="itemSelect" listener="#{bean.updateFacility()}" partialSubmit="true" process="@this" update="facility"/> </p:autoComplete> <!-- facility --> <p:outputLabel id="facilityLabel" for="facility" value="#{i18n.facility}" /> <p:autoComplete id="facility" value="#{bean.selectedFacility}" required="false" dropdown="true" completeMethod="#{bean.completeFacility}" var="facility" itemValue="#{facility}" itemLabel="#{facility}" > </p:autoComplete>JavaScript:
cy.route({ method: 'POST', url: '/app/dummy.xhtml' }).as('request') cy.selectOptionLoadingAlias('#element_input', '#element_1', '@request') cy.selectOptionLoadingAlias('#facility_input', '#facility_1', '@request') Cypress.Commands.add("selectOptionLoadingAlias", (inputField, selectOption, alias) => { cy.get(inputField).should('be.visible').clear().type('Dummy 1') cy.wait(alias).then((xhr) => { // we checked that xhr is the correct request (update for element/facility) cy.get(selectOption).click() cy.get(selectOption).should('not.be.visible') }) })Intente corregir a continuación la sección clara, el truco del clic debería asegurar que el elemento no se separe:
cy.get(inputField).click({force:true}).clear().type('Dummy 1');