Я мог получить только частичный ответ, прежде чем мне пришлось идти дальше, но, возможно, это может помочь вам или кому-то еще найти окончательное решение.
Чтобы исправить ошибку, свойство view
должны быть предоставлены для mousedown
.Предоставление window
, как это, позволило методам D3 запускаться правильно:
cy.get('svg')
.trigger('mousedown', { which: 1, force: true, view: window }) // <-- here
.trigger('mousemove', { position: 'left', view: window }) // <-- here
.trigger('mouseup', { position: 'left', force: true });
Однако при выполнении теста не происходило перетаскивания или перемещения, и оттуда возникали другие вопросы.Начиная с ... Это правильный контекст для отправки вместе с событием?Казалось бы, так как window
кажется единственным контекстом, который имеет цепочку свойств, которую ожидает D3:
view.document.documentElement
Или это анти-паттерн ... запах кода?
Отбрасывание этих последующих вопросов привело к нескольким наблюдениям, которые, казалось, имели значение.
Первое касается того, как D3 обрабатывает события мыши и перетаскивания.D3 имеет многочисленные прослушиватели событий и обратные вызовы, которые переопределяют стандартные события и их соответствующие обработчики.
Во-вторых, iframes
находятся в игре с Cyner Runner.
Может ли быть так, что события Cypress, запускаемые программным способом, правильно запускаются в iframe Cypress, но из-за агрессивной обработки событий D3 трансляция этих событий в iframe приложения теряется?Особенно если учесть, что ручное перетаскивание круга в окне просмотра тестирования работало нормально.
Что, опять же, приводит к:
- Не вызываются ли программно-инициируемые события в правильном контексте?
- Являются ли эти события каким-то образом поглощенными или сталкивающимися с обработчиками событий D3?
Я выбрал График направленной силы масштабирования в качестве объекта D3 внутри объекта D3.простое приложение Ember, для исследования этого вопроса.Он отлично воспроизвел упомянутую ошибку, так что это определенно вызов D3 + Cypress, не связанный с интерфейсной средой.
Я надеюсь, что это усилие будет полезным.
Продолжение ...
После дальнейшего чтения - Компромиссы Кипариса , и особенноих открытый запрос извлечения Поддержка событий собственного браузера - вполне вероятно, что переопределения обработки событий в D3 еще не полностью согласованы в Cypress.Более простые реализации, подобные описанным в примере drag & drop , не представляют проблем обработки событий, создаваемых сторонней библиотекой, такой как D3.Однако эта поддержка, похоже, находится в стадии разработки в команде Cypress.