Как я могу заставить Cypress имитировать нажатие молотка?

#cypress #hammer

#cypress #молоток

Вопрос:

У меня есть прослушиватель Hammer в div, который прослушивает нажатие. Я пишу тесты с помощью Cypress, и у меня возникли проблемы с имитацией нажатия. Я возлюсь с trigger() . Я пробовал trigger('tap') , trigger('mousedown').trigger(mouseup') и trigger('touchstart').trigger('touchend') , но безуспешно. Кто-нибудь успешно производит нажатия молотка с помощью Cypress?

Нажатие вызывает функцию, которая устанавливает window.location = new-page.html , вот так…

 function changePage(id) {
    window.location.href = "FraisEnListe.aspx?idnote="   id;
}
  

К сожалению, если я вызываю функцию непосредственно из Cypress, вот так…

 cy.window().then((win) => {
  win.changePage(29312);
})
  

в качестве базового URL берется URL-адрес Cypress stem, а не текущее местоположение в тестируемом приложении, и я получаю дымящийся 404. Это кажется очень сложным.

Комментарии:

1. Может ли это быть связано с проблемой, из-за которой я их открыл? github.com/cypress-io/cypress/issues/2521

2.Кроме того, см. Erik Zeedijk , мы все еще пытаемся получить Hammer.js для запуска при щелчке () или любом другом событии, отправленном из Cypress, если на то пошло. Насколько я понимаю, Cypress не может отправлять собственные события. Похоже, что Hammer не распознает события jQuery, поэтому мы застряли. Также попытка действий custom .invoke не работает. Комбинация Hammer и Cypress, похоже, является проблемой. Поскольку события Hammer используются в приложении повсюду, нам, возможно, потребуется обратиться к Selenium для нашего тестирования.

Ответ №1:

Попробуйте добавить свойство типа: ‘touch’, для запуска события

  const pointerEvent = {
    force: true,
    pointerType: 'touch',
    x: 11.1386137008667,
    y: 653.46533203125,

}

 cy.get('[data-cy=body]')
            .trigger('pointerdown', pointerEvent)
            .trigger('pointerup', pointerEvent)
  

В моем случае я должен нажимать или касаться углов:

 const pointerEvent = {
            force: true,
            pointerType: 'touch',
        };
        cy.wait(3000);
        cy.get('[data-cy=body]')
            .trigger('pointerdown', 'topLeft', pointerEvent)
            .trigger('pointerup', 'topLeft', pointerEvent)
            .wait(5000);