Cypress with OpenLayers - как имитировать перетаскивание ctrl + мыши

Я пытаюсь имитировать перетаскивание ctrl + мыши на карте OpenLayers с помощью Cypress.

Единственный способ заставить OpenLayers регистрировать события click / Cypress (например, щелчок для создания функции) - это .click(), например.

cy.get('#map').click(845, 710);

Если я использую .trigger() и _4 _ / _ 5 _ / _ 6_, он либо не работает, либо выдает ошибку. В любом случае это не сработает.

Поскольку .click() также испускает _8 _ / _ 9_ событий, я не могу использовать это для имитации перетаскивания ctrl + мыши.

Дополнительно для нажатия ctrl я использую следующее: cy.get('body').type('{ctrl}', {release: false}) - это работает.

Я не знаю, что попробовать дальше. Есть ли свойство .click(), которое мне не хватает? или это потенциальная ошибка / проблема с OpenLayers или Cypress?

Изменить: я использую Cypress 4.8.0 и OpenLayers 6.3.1


person edant92    schedule 10.06.2020    source источник
comment
Любой фрагмент, которым вы можете поделиться, мы можем поработать?   -  person Islam Elshobokshy    schedule 21.06.2020
comment
Привет! Мой ответ помог вам разобраться в проблеме?   -  person Owen Versteeg    schedule 22.06.2020


Ответы (2)


У вас есть две возможности: первая, это ошибка в Cypress, или две, вы неправильно обрабатываете события.

Основной способ работы Cypress - запуск событий через интерфейсы API в браузере, а не имитация реальных действий клавиатуры или мыши (источник от сотрудника Cypress), поэтому вы можете моделировать только отдельные события, которые отслеживает браузер. Я взглянул на то, как это делает Cypress, и обнаружил, что у людей были проблемы с этим. в прошлом. Вы можете попробовать фрагмент в конце обсуждения Github по этой ссылке, я не уверен, что это может сработать.

В этом случае вы моделируете событие Click с помощью события . ctrlKey установлено в значение true. (Или, по крайней мере: это то, что вы хотите.) Чтобы отладить это дальше, я бы записал само событие и проверял, установлен ли event.ctrlKey:

  • Если ложно - вот и все, это баг в Cypress.
  • Если это правда, то Cypress работает нормально, вы просто слушаете события ctrl / click необычными способами, и если вы переключитесь на что-то вроде это, у тебя все будет хорошо.

Удачи, дайте мне знать, как дела!

person Owen Versteeg    schedule 18.06.2020

Если у вас правильно настроены исходные и целевые элементы DnD, trigger будет работать:

describe('DnD simulation test', () => {
  it('finds the content "type"', () => {
    cy.visit('https://zikro.gr/dbg/so/62303304/dnd-with-cypress.html');

    // #dz-a -> Dropzone A, which the #drag is inside when page loads
    // #dz-b -> Dropzone B, which the #drag element will be inside after DnD simulation

    cy.get('#drag').trigger('dragstart', { ctrlKey: true });
    cy.get('#dz-b').trigger('drop', { ctrlKey: true });
    cy.get('#drag').trigger('dragend', { ctrlKey: true });

    // We just test if the destination element has 1 child after the DnD simulation.
    // When the page loads it has no children at all, but after DnD simlation it has exactly 1 element
    cy.get('#dz-b').children().should('have.length', 1);
  });
});

Страница в URL https://zikro.gr/dbg/so/62303304/dnd-with-cypress.html открыта и имеет Функциональность DnD, которую вы можете использовать в приведенном выше коде, а также протестировать и проверить консоль на наличие журналов, которые также обнаруживают клавишу Ctrl. Он проверяет, есть ли у целевого объекта перетаскивания дочерний элемент после моделирования события. Конечно, вы можете выполнить любой другой тест, который докажет, что источник упал с A на B адресатов.

person Christos Lytras    schedule 22.06.2020