Эмулируйте, щелкая ссылку с Javascript, который работает с IE - PullRequest
22 голосов
/ 06 мая 2009

Я хочу, чтобы java-скрипт щелкал ссылку на странице. Я нашел в сети что-то, что предлагает добавить такую ​​функцию:

function fireEvent(obj,evt){

    var fireOnThis = obj;
    if( document.createEvent ) {
      var evObj = document.createEvent('MouseEvents');
      evObj.initEvent( evt, true, false );
      fireOnThis.dispatchEvent(evObj);
    } else if( document.createEventObject ) {
      fireOnThis.fireEvent('on'+evt);
    }
}

Затем позвоните, используя:

fireEvent(document.getElementById('edit_client_link'),'click');

Кажется, это нормально работает для FF, но с IE это не работает!

Есть идеи?

Ответы [ 5 ]

36 голосов
/ 06 мая 2009

Я думаю, вам все еще нужно вызвать document.createEventObject - вы только проверили, что он там есть. Непроверенный код следует, но на основе документов он должен работать.

function fireEvent(obj,evt){

    var fireOnThis = obj;
    if( document.createEvent ) {
      var evObj = document.createEvent('MouseEvents');
      evObj.initEvent( evt, true, false );
      fireOnThis.dispatchEvent( evObj );

    } else if( document.createEventObject ) {
      var evObj = document.createEventObject();
      fireOnThis.fireEvent( 'on' + evt, evObj );
    }
}
2 голосов
/ 09 декабря 2009

Сначала это не сработало, а потом я увидел, что в коде отсутствует параметр для части IE. Вот обновление, которое должно работать:

function fireEvent(obj, evt) {
    var fireOnThis = obj;

    if (document.createEvent) {
        // alert("FF");
        var evtObj = document.createEvent('MouseEvents');
        evtObj.initEvent(evt, true, false);
        fireOnThis.dispatchEvent(evtObj);
    } 

    else if (document.createEventObject) {
        // alert("IE");
        var evtObj = document.createEventObject();
        fireOnThis.fireEvent('on'+evt, evtObj);
    }
}
1 голос
/ 17 мая 2012

Попробуйте это, если вы все еще получаете ошибку (Использование Jquery + прототип)

function fireEvent(element,event){  
if (document.createEventObject){
// dispatch for IE
try {
      var evt = document.createEventObject();
      jQuery(element).change();
      return element.fireEvent('on'+event,evt);
} catch(e) { }                  
}
else{
// dispatch for firefox + others
var evt = document.createEvent("HTMLEvents");
evt.initEvent(event, true, true ); // event type,bubbling,cancelable
return !element.dispatchEvent(evt);
}
}
0 голосов
/ 16 июня 2010

Мы нашли более простой способ симуляции щелчка правой кнопкой мыши (протестировано в IE8). Используйте двойной щелчок или два одиночных щелчка, затем щелкните правой кнопкой мыши, используя Shift-F10. Я не знаю точно, почему это работает, но это работает. В приведенном ниже примере кода мы используем метод Selenium, чтобы дважды щелкнуть мышью, а затем с помощью драйвера IE найти WebElement и отправить последовательность клавиш Shift-F10, которая имитирует щелчок правой кнопкой мыши. Мы используем это для тестирования веб-приложений на основе GWT. Единственное место, где это не сработало, было в древовидном элементе управления, где было установлено контекстное меню для отображения в координатах мыши. Часто координаты мыши были отрицательными, поэтому щелчок правой кнопкой мыши по пункту меню не приводил к отображению дочерних пунктов меню. Чтобы справиться с этим случаем, мы добавили немного кода в элемент управления, чтобы, если координаты мыши были отрицательными, контекстное меню отображалось с 0,0.

selenium.click("//td[@role='menuitem' and contains(text(), 'Add')]");
selenium.click("//td[@role='menuitem' and contains(text(), 'Add')]");
new InternetExplorerDriver().findElement(By.xpath("//td[@role='menuitem' and contains(text(), 'Add')]")).sendKeys(Keys.SHIFT, Keys.F10);
0 голосов
/ 10 июня 2010

Если вы хотите смоделировать клики только для ссылок , вы можете использовать это:

function clickLink(id){
location.href=document.getElementById(id).href;
}
...