.click() не работает в mocha-phantomjs для определенных элементов

Я пишу несколько тестов, используя тестовую среду Mocha и Chai библиотека утверждений Я тестировал их в браузере Chrome, и они работают нормально, но затем я попробовал их в безголовом браузере mocha-phantomjs и события .click(), которые я отправляю для определенных элементов, просто не срабатывают, в то время как другие работают.

Тест успешно входит на веб-сайт, что выполняется с помощью:

$("#login").click()

«#login» — это кнопка отправки формы, и она отлично работает, если щелкнуть таким образом.

Затем я хочу щелкнуть элемент меню, который является элементом привязки.

$("#menuItemToClick").click();

Именно здесь он перестает работать в mocha-phantomjs, хотя он отлично работает в Chrome.

Таким образом, очевидно, что функция .click() определена и работает, но не для этого элемента.

Я исчерпал свой google-foo. Вот некоторые другие вещи, которые я видел, как другие упоминали и пробовали:

Использовать javascript-рассылкуEvent

var evObj = new CustomEvent('click');
evObj.initEvent('click', true, false);
document.getElementById('menuItemToClick').dispatchEvent(evObj);

Это запускает событие щелчка и переводит браузер на правильный URL-адрес, но также вызывает перезагрузку всей страницы как в chrome, так и в mocha-phantomjs, что перезапускает тесты с самого начала, помещая их в бесконечный цикл... Есть ли способ использовать это, не вызывая перезагрузки страницы?

Используйте фантомные страницы page.sendEvent()

var elementPosition = $("#menuItemToClick").offset();
page.sendEvent('click', elementPosition.left + 1, elementPosition.top + 1);

Предполагается, что это отправит собственное событие щелчка, если вы передадите ему правильные координаты элемента. Я пытался заставить это работать, но я не мог получить доступ к странице из запущенных тестов мокко. Есть ли способ получить доступ к переменной страницы phantomjs из тестов mocha-phantomjs?

Любая помощь приветствуется!


person Dsyko    schedule 28.05.2013    source источник
comment
Любая идея, почему триггер jquery не работает? Я вижу то же самое, когда первый триггер работает, а остальные терпят неудачу. Это сам фантом или мокко-фантом?   -  person Kris Erickson    schedule 19.03.2014
comment
возможный дубликат PhantomJS; щелкните элемент   -  person    schedule 15.08.2014
comment
@torazaburo это другая проблема/вопрос. .click() определен для выбранного элемента jQuery, но не работает должным образом для всех элементов (работает для некоторых, но не для других). Хотя вопрос, на который вы ссылаетесь, за который вы проголосовали больше всего, имеет аналогичное разрешение, он не является дубликатом.   -  person Dsyko    schedule 16.08.2014


Ответы (1)


Я вернулся и поиграл с этим еще некоторое время и, наконец, заставил диспетчерское событие работать без сброса страницы, и оно работает как в chrome, так и в mocha-phantomjs! Я думаю, что сброс/перезагрузка страницы как-то связана с тем, что событие не является конкретно событием мыши.

Я поместил функцию удобства вверху моих тестов:

var clickElement = function (el){
    var ev = document.createEvent("MouseEvent");
    ev.initMouseEvent(
      "click",
      true /* bubble */, true /* cancelable */,
      window, null,
      0, 0, 0, 0, /* coordinates */
      false, false, false, false, /* modifier keys */
      0 /*left*/, null
    );
    el.dispatchEvent(ev);
};

и теперь могу щелкнуть мой элемент привязки:

clickElement($("#menuItemToClick")[0]);
person Dsyko    schedule 29.05.2013