Cypress не нацелен и не изменяет «строки на страницу»компонента Vuetify v-таблицы данных

#vue.js #testing #vuetify.js #cypress

Вопрос:

Компонент Vuetify v-data-table имеет поле выбора строк на страницу в нижней части таблицы, проблема в том, что это не поле выбора в html, поэтому у меня масса проблем с тестированием изменения параметров с помощью Cypress, я дошел до этого фрагмента кода:

 cy.get('#app > div.v-application--wrap > main > div > div > div > div > div.container > div > div > div.pa-5.v-card.v-sheet.theme--light > form > div:nth-child(10) > div.v-data-table.v-data-table--dense.theme--light > div.v-data-footer > div.v-data-footer__select > div > div > div > div.v-select__slot')
            .trigger('mouseover').click();
cy.get('#app > div.v-menu__content.theme--light.menuable__content__active').children().trigger('mousedown', 0, 15).wait(500).trigger('mouseover').click();
 

Однако все, что делает этот код,-это нажимает на кнопку «Выбрать» в нижнем колонтитуле таблицы, наводит курсор на опцию, нажимает, но затем опция фактически не меняется, я был бы признателен за любую помощь от людей, которые провели тестирование Cypress на компоненте Vuetify v-data-table

Ответ №1:

Вы можете изменить количество строк на странице, введя опцию, например «Все», в нужный элемент. Поиск правильного элемента — это немного проб и ошибок.

 it('changes rows-per-page by typing option', () => {

  cy.contains('Rows per page')       // get the footer element 
    .find('.v-select__selections')   // this child element accepts keyboard input 
    .type('All{enter}')              // type in the option you want
    
  // Verify
  cy.get('.v-select__selection').should('contain', 'All')
  cy.get('tbody tr').should('have.length', 10)
})
 

Пользователь также может использовать клавишу со стрелкой вниз в списке, чтобы вы могли протестировать этот способ.

Поскольку всплывающий список анимирован, главное-добавить .should('be.visible') , чтобы дождаться появления списка в DOM (в противном случае тест будет слишком быстрым).

 it('changes rows-per-page by using downarrow', () => {

  cy.contains('Rows per page')
    .find('i').click()            // open the list

  cy.get('[role="listbox"]')      // get the list that pops up
    .should('be.visible')         // wait for it
    .focus()                      // need to shift focus, by default it's on the input
    .type('{downarrow}')
    .type('{downarrow}')
    .type('{downarrow}')
    .type('{downarrow}')
    .type('{enter}')

  // Verify
  cy.get('.v-select__selection').should('contain', 'All')
  cy.get('tbody tr').should('have.length', 10)
})
 

Пользователь также может использовать мышь,

 it('changes rows-per-page by clicking option', () => {

  cy.contains('Rows per page')
    .find('i').click()

  cy.get('.v-list-item').eq(3)
    .should('be.visible')
    .click()
    
  // Verify
  cy.get('.v-select__selection').should('contain', 'All')
  cy.get('tbody tr').should('have.length', 10)
})