Как предотвратить отсоединение элемента от ошибок DOM? - PullRequest
6 голосов
/ 13 января 2020

У нас проблема синхронизации с кипарисами / jsf и двумя PrimeFaces-Autocompletes. Наш ввод объекта зависит от выбранного элемента. Когда элемент выбран, отправляется запрос ajax и поле средства обновляется. (см. пример кода ниже - x html)

Наш тест на кипарис сначала выбирает элемент, а затем хочет выбрать объект. Однако поле ввода объекта не может быть очищено, поскольку оно отсоединено от DOM. Сообщение об ошибке: «CypressError: Тайм-аут повторной попытки: cy.clear () не удалось, потому что этот элемент отсоединен от DOM». Мы уже ждем запроса ajax (с cy.route), но проблема все еще возникает. (см. пример кода ниже - javascript)

Как мы можем предотвратить ошибки отсоединения с зависимыми полями ввода?

<!-- 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}"
                dropdown="true"
                completeMethod="#{bean.completeFacility}"
                var="facility" itemValue="#{facility}" itemLabel="#{facility}"
                required="false">
</p:autoComplete>

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')
    })
})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...