Я недавно наткнулся на инструмент e2e - Cypress.io. В настоящее время я занимаюсь POC для фирмы, с которой я работаю, для тестирования e2e реактивного приложения. Он имеет наведение над меню, как и большинство веб-приложений.
Пример:
URL: Fmovies
Я пытался щелкнуть элемент меню из этого наведения, но тест не показал, что на display
установлено значение none
.
В Selenium мы используем метод moveElement
для перехода к этому элементу, а затем делаем все, что нам нужно. Однако я не могу это сделать, используя Cypress.
Учитывая текущее меню, я написал это
it('goes to specific element in Genre',()=>{
cy.get('#menu').within(()=>{
cy.get('ul').within(()=>{
cy.contains('Family').click();
});
});
});
Ошибка:
Cypress имеет уникальный рабочий процесс, который основан на том, чтобы включить как можно больше тестов в его поведение по умолчанию. Прежде чем имитировать щелчок по элементу, содержащему "Семейство", он проверяет работоспособность. Это встроенный тест, который не будет выполнен, если элемент скрыт, display:none
(в данном случае), размер 0,0 и т.д. Только после прохождения этого теста он будет имитировать действие над элементом, содержащим "Семейство".,
Вы можете переопределить проверку действия с помощью .click({force:true})
, но тогда вы потеряете гарантию, что пользователь действительно сможет найти и щелкнуть элемент.
Правильный способ выполнить этот тест - вызвать раскрывающееся меню, чтобы элемент стал видимым, а затем выполнить щелчок. Вот что вы должны сделать, если хотите найти пункт меню "Жанр", открыть раскрывающееся меню и щелкнуть пункт "Семейство":
describe('Hover Menu',()=>{
it('can click on a genre sub-menu item',()=>{
cy.get('#menu').contains('Genre').next('.sub-menu').then($el=>{
cy.wrap($el).invoke('show')
cy.wrap($el).contains('Family').click()
})
})
})
Здесь show
- это метод jQuery, который изменяет свойства CSS, чтобы сделать элемент видимым.
cy.wrap($el)
превращает элемент jQuery в Cypress Chainer, который затем можно вызывать с помощью команд Cypress.